localhost02 / Taobao_order_robot

【CSDN资源代下 | 实现机器值守 | 全自动】淘宝自动发货机器人(Selenium+Bs4+Requests+Autoit)
741 stars 263 forks source link

拖动条刷新后,报错 #1

Open bearllm opened 6 years ago

bearllm commented 6 years ago

Hi,最近我有个项目也是需要登录淘宝。拖动滑块一直验证失败(拖动动作进行了),点击刷新滑块之后, selenium报错 either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed

难道只有重新刷新页面了么?我的微信是TQ_LAOLIU,希望一起探讨

bearllm commented 6 years ago

找到问题了,要把action = ActionChains(driver)写到循环里面,等于是重新加载变化后的页面。但是新问题来了,无论尝试多少次都报失败,还在测试淘宝的验证机制。感觉是探测了鼠标移动,鼠标点击,其实还有键盘输入记录,鼠标移动的记录、点击的记录等等的信息 for i in range(5): print(i) action = ActionChains(driver) slide_span = driver.find_element_by_id("nc_1_n1z") # 取得滑块span action.click_and_hold(slide_span) # 鼠标左键按住span action.move_by_offset(258, 0) # 向右拖动258像素完成验证 action.perform() time.sleep(1) action.reset_actions() # 页面进行了刷新,需要清除action之前存储的elements try: slide_refresh = driver.find_element_by_xpath( "//div[@id='nocaptcha']/div/span/a") # 页面没有滑块,而是“点击刷新再来一次” slide_refresh.click() except exceptions.NoSuchElementException: # 滑动成功 break

localhost02 commented 6 years ago

em……,淘宝登录,我也是在这儿一直有这么一个问题,现在还没有弄明白为什么“点击刷新再来一次”后仍然一直会失败。

tingyunsay commented 6 years ago

我感觉是不是还需要添加一些操作过程中的操作:比如鼠标拖动的时候会上下抖动,等等。我尝试了很多次这个代码,只有某一次是完完全全登录成功的,但是之后的都会存在滑块不能通过问题,我的环境是:ubuntu 16.04 / firefox 驱动:geckodriver-v0.19.1-linux64.tar.gz / selenium 3.9.0 / 火狐浏览器的版本是58 。博主在Windows下是正常运行的嘛?

++ 在博主的readme中看到这几句: 1.Selenium开启浏览器【火狐浏览器驱动】 2.进行登录【淘宝登录页面】 3.滑块验证(chorme滑块验证会失败)【若需要验证】 第一步说是启动火狐浏览器,后面又提到了chorme滑块验证会失败,但是我试了两者都是一样的问题,都是会拖动失败。

bearllm commented 6 years ago

我尝试过多种方式,比如分两段拖动(随机一点),以免拖动太快失败 xoffset=150+random.randint(1,30) print(xoffset) action.move_by_offset(xoffset,0).perform() #平行移动鼠标 time.sleep(1); xoffset=150+random.randint(1,30) print(xoffset)

也尝试过拖动时候Y轴上下随机5个单位

还是不行,只是输入密码之前晃动鼠标会减少拖动条出现的概率

tingyunsay commented 6 years ago

回复楼上的朋友,我这里的情况是:即便是没触发验证码,可以直接点击登录,但大部分时候也会触发验证码并且重新输入密码,之后又回到了滑块验证的步骤,看了下滑块验证时的网络请求大概还找到下面的信息

在拖动完成之后其访问的是这个网址 https://cf.aliyun.com/nocaptcha/analyze.jsonp?a=CF_APP_TBLogin_PC&t=1a421d5c6e1153ff296bef5d3e11c0a31db8ef14&n=106

其成功的返回值是这样: {"result":{"csessionid":"","code":0,"value":""},"success":true} 失败的返回值是这样: {"result":{"csessionid":"","code":300,"value":"block"},"success":true}

能否对这个value:block进行什么样的判断呢?

++ 继续查了一些资料,貌似和极验的拖动验证类似,需要生成一副轨迹图,这个轨迹图要和人的操作相似才有可能通过 上面的网址可能只是验证拖动的操作轨迹,然后返回的判断后的结果

localhost02 commented 6 years ago

实在不行,考虑试试AutoIt3呢

AutoIt3模拟鼠标拖拽示例: MouseClickDrag(‘left’, 40, 30, 600, 30) //按住左键将40,30位置的图标拖动到600,30处 详见:http://blog.csdn.net/langyu1021/article/details/73731385

localhost02 commented 6 years ago

我也还没尝试过行不行哈,;

babyfire commented 6 years ago

滑动验证这个问题有人成功的嘛? 我在想用weibo登陆

DanielQujun commented 6 years ago

有人解决了出现滑块的问题吗,我用selenium+chrome/firefox都试了,每次都会出现滑块,然后手动拖滑块也是验证失败,知乎有人给了解决方案,但是我这边也还是会出现滑块失败。。

localhost02 commented 6 years ago

在淘宝登录时,加入随机点击操作,改善“淘宝判断为机器人登录而出现滑块验证”这一情况,但是情况仍然不能完全避免。目前较好的办法是:手动在本机多登录几次淘宝,让淘宝后面不再判定该IP为机器人,一般该办法可以一劳永逸!

paulplayer commented 6 years ago

为什么我用pupeeteer只打开页面后,手动验证登录也不通过,用自己的浏览器打开手动验证登录就可以,有跟我一样的嘛?

localhost02 commented 6 years ago

现在婉转地修改成了:”每次登录时手动滑块验证,程序再继续运行处理“ 这么一个逻辑了,,

efans007 commented 6 years ago

selenium下面手动滑块验证都不行,报错这样的错误,有解决办法吗? image

programerzhang commented 6 years ago

也出现跟楼上一样的情况,只要是selenium打开的浏览器,直接就通不过

jyeaam commented 6 years ago

我也有这个问题,然后分别试了微博、支付宝、截图扫二维码登录。远程服务器没有浏览器界面,跑项目还是截图扫二维码登录方便。其它的登录方式都需要输入手机验证码。

liberty123 commented 6 years ago

我也遇到了这个问题 试过了win10 +selenium(3.14.0) + IE(11.285) 不会出错,但是我不能拖动滑块,我使用pyautogui win32api 都不能拖动滑块. 使用autoit3 昨天还可以,今天 只能拖动到一半的位置...

random-yang commented 6 years ago

到达滑块验证的那一步的时候 自己手动打开的chrome,手动验证可以通过 chromedriver打开的chrome,即便是手动验证也通不过 所以问题其实根本就不在模拟滑块滑动上

programerzhang commented 6 years ago

对,只要检测到是机器打开的就会被屏蔽

juedi998 commented 6 years ago

告诉你为啥,因为使用了webdriver的话navigator.webdriver会返回true;且,驱动里有个特征也需要屏蔽掉;这些都不是事,重点是它会检测过程、环境。。。

cyx441984694 commented 6 years ago

我也碰到一样的问题,添加了“手抖”还有“位移速度”这些都跑不过。问题应该是自动检测到了这个selenium的东西了。 然后我搞了个偷懒的方式...用add_argument(user-info)这种方式,只要你之前用chrome登录过淘宝,就可以实现自动登录...然后就没有验证码了。

但是如果你测试过多的话,会在爬虫的中途又出现滑动验证码.....

之前在stackoverflow问过这种问题,也是没答复...

lig7711 commented 5 years ago

诸位大神,这个问题有解决吗?之前拖滑块多刷机器还能出验证码,今天突然再也不出现了,完全登陆不了了。。。。。。尴尬啊,求大神赐教。。。

wmy1334 commented 5 years ago

诸位大神,这个问题有解决吗?之前拖滑块多刷机器还能出验证码,今天突然再也不出现了,完全登陆不了了。。。。。。尴尬啊,求大神赐教。。。

你这该不会封ip或者账号了吧

fflamingogo commented 4 years ago

改chromedriver的全量标识 就不会失败

Joannxxxxx commented 4 years ago

改chromedriver的全量标识 就不会失败

可以详细说说怎么做吗

fflamingogo commented 4 years ago

@Joannxxxxx https://blog.csdn.net/qq_34268952/article/details/105081205

isruihu commented 4 years ago

@Joannxxxxx https://blog.csdn.net/qq_34268952/article/details/105081205

chromedriver.exe 打开是乱码,怎么查看源码?