济宁营销网站建设,电子商务有什么岗位,深圳市鸿运通网站建设,wordpress整合ckplay在使用Selenium写自动化爬虫时#xff0c;遇到验证码是常事了。我在写爬取测试的时候#xff0c;遇到了点击型的验证码#xff0c;例如下图这种#xff1a; 这种看似很简单#xff0c;但是它居然卡爬虫#xff1f;用简单的点触验证码的方法来做也没法实现 平常的点触的方…在使用Selenium写自动化爬虫时遇到验证码是常事了。我在写爬取测试的时候遇到了点击型的验证码例如下图这种 这种看似很简单但是它居然卡爬虫用简单的点触验证码的方法来做也没法实现 平常的点触的方法
btn driver.find_element_by_css_selector(.botton_)
btn.click()这种方法失败后 我决定要使用模拟鼠标点击的方法通过pyautogui库来实现。
pyautogui可以模拟鼠标的慢加速、快到按钮时减速、缓慢停止等行为以模仿人类点击按钮的方式。
简单的代码是这样的
import pyautogui
pyautogui.moveTo(x100, y100)
pyautogui.click()需要实现的逻辑是
将网页放大到最大就像点F11这一步为了第二步可以获得正确的位置定位到点触验证码点在网页上的位置鼠标移动到该位置并点击如果想把页面还原
为了找到验证码的位置我的实现的方法是这样的
from selenium import webdriver
import pyautogui
import time
driver webdriver.Chrome(optionsoption)time.sleep(3)
driver.maximize_window() # 最大化窗口
time.sleep(6)
current_position pyautogui.position()
print(f目标移动位置X{xx}, Y{y})
print(f当前鼠标位置X{current_position.x}, Y{current_position.y})这里是报出鼠标位置的方法前提是在最大化窗口之后我们把鼠标手动移动到目标的位置例如放在红色圈区域的位置这就能print出在最大化页面下一定要让页面最大化要点击区域的绝对x轴和y轴的长度了这样就能定位到目标的地方了。
driver.maximize_window() # 最大化窗口
sleep(3)
x931
y664
#pyautogui.moveTo(x, y)
#点击上面的位置
#pyautogui.restore() #调整会原来的大小
pyautogui.moveTo(x, y) #, duration2, tweenpyautogui.linear
pyautogui.click()
sleep(3)#将页面缩小到成普通位置以免占用电脑屏幕这一步仅供参考
original_size {width: 800, height: 600}
driver.set_window_size(original_size[width], original_size[height])
sleep(3)
driver.refresh()#刷新如果直接通过css_selector或者xpath的元素来点击验证按钮无法通过验证的话可以模拟鼠标点击的方法这样更像模拟人类的行为。
注意这种方法也只能是在验证码出现的在一定时间内的完成点击才不会被视为爬虫所以在点击的时候最好不要耽误太多时间在测试上。
当然如果有代理服务器的情况下做可能会更好。