基于 selenium 模拟登陆 12306 滑块问题 已解决
首先注明,在使用 selenium 模拟登陆之前我首先用浏览器手动登录过 12306,这一步可能也影响了后续验证,影响先忽略
先讲重点,这里需要规避检测和去除特征识别,不然滑块验证就会出现如图错误哎呀,出错了,点击刷新再来一次(error:tMKTxq)

解决方法是(借鉴其它博主的方法,先拿来主义,原理不深纠):
# 实现规避检测
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)
bro=webdriver.Chrome(service=ser,options=option)
# 传入 URL
bro.get("https://kyfw.12306.cn/otn/resources/login.html")
# 采取去除特征识别,即以下两行代码。
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
bro.execute_script(script)
可以采用以下代码进行验证,输出结果为False则滑块认证请求可以实现
js = 'return window.navigator.webdriver'
print(bro.execute_script(js)) # 可以直接在终端输出webdriver检测结果
打开 12306 官网登录界面,按 F12 进入开发者模式,点击元素选择键(箭头1所示),然后点击账号输入栏(箭头2所示),可以看到其对应的标签 id="J-userName",在这里使用 find_element(By.ID/CLASSNAME,''),进行标签查找

然后便可以用send_keys("")实现账号输入
# 找到用户名输入标签
userName_TAG=bro.find_element(By.ID,"J-userName")
userName_TAG.send_keys("183xxxx0472")
sleep(1)
同样的可以找到密码输入对应的标签

可以实现密码填充
password_TAG=bro.find_element(By.ID,"J-password")
password_TAG.send_keys("2022xxxxLZHx")
sleep(1)
依次可以找到登录的id="J-login"对应的标签

账号密码传入完毕,然后使用click()点击登录
login_TAG=bro.find_element(By.ID,"J-login")
login_TAG.click()
sleep(1)
滑块对应的id="nc_1_n1z"

找到滑块
#找到滑块
div_TAG=bro.find_element(By.ID,"nc_1_n1z")
拖动滑块,对应位置像素值变化,可以看到滑块最终位置为 300

拖动滑块需要使用动作链,定义动作链对象,点击并拖动使用 click_and_hold(div_TAG):
# 动作链
action=ActionChains(bro)
# 点击并长按指定的标签
action.click_and_hold(div_TAG)
使用move_by_offset(x,y): x 水平方向 y数值方向 两个参数实现滑块水平 300 像素拖动,移动过程中,采用渐移或一步到位影响不大
# 渐移
for i in range(5):
#perform() 立即执行动作链操作
# move_by_offset(x,y): x 水平方向 y数值方向 两个参数
action.move_by_offset(60,0).perform()
sleep(0.3)
最后释放滑块
action.release().perform()
最终实现代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# 导入动作链对应的类
from selenium.webdriver import ActionChains
# 反检测
from selenium.webdriver import ChromeOptions
from time import sleep
option=ChromeOptions()
# 谷歌驱动路径
ser = Service(executable_path='./chromedriver.exe')
# 实现规避检测
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option("detach", True)
bro=webdriver.Chrome(service=ser,options=option)
# 传入 URL
bro.get("https://kyfw.12306.cn/otn/resources/login.html")
# 采取去除特征识别,即以下两行代码。
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
bro.execute_script(script)
js = 'return window.navigator.webdriver'
print(bro.execute_script(js)) # 可以直接在终端输出webdriver检测结果
# 找到用户名输入标签
userName_TAG=bro.find_element(By.ID,"J-userName")
userName_TAG.send_keys("183xxxx0472")
sleep(1)
password_TAG=bro.find_element(By.ID,"J-password")
password_TAG.send_keys("2022waxxxxx")
sleep(1)
login_TAG=bro.find_element(By.ID,"J-login")
login_TAG.click()
sleep(1)
#找到滑块
div_TAG=bro.find_element(By.ID,"nc_1_n1z")
# 动作链
action=ActionChains(bro)
# 点击并长按指定的标签
action.click_and_hold(div_TAG)
# 渐移
for i in range(5):
#perform() 立即执行动作链操作
# move_by_offset(x,y): x 水平方向 y数值方向 两个参数
action.move_by_offset(60,0).perform()
sleep(0.3)
action.release().perform()
# print(div_TAG)
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声