下载浏览器驱动 chromedriver.exe (需要和Chrome浏览器版本号对应)
下载地址: https://npm.taobao.org/mirrors/chromedriver/
根据日期查找
notes.txt 里查看支持的版本
这个支持Chrome 95版本
下载python包:selenium
pip install selenium
代码如下(示例):
from selenium import webdriver # 控制ChromeDriver并允许驱动浏览器
from selenium.webdriver import ActionChains # 模拟鼠标操作
from selenium.webdriver.common.by import By # By类
from selenium.webdriver.support.ui import WebDriverWait # 导入显式等待类
from selenium.webdriver.support import expected_conditions as EC # 导入期望场景类
其他包及作用可以参考 https://blog.csdn.net/kyaaaa1/article/details/87534998
代码如下(示例):
# 有web界面
options = webdriver.ChromeOptions()
chromedriver_path = r'C:\Users\pc\Downloads\chromedriver_win32\chromedriver.exe' # 自己下载的chromedriver.exe 所在路径
options.add_argument("start-maximized") # 窗口最大化
options.add_argument("--disable-blink-features=AutomationControlled") # 去掉webdriver痕迹
# options.add_argument('disable-infobars') # 已废弃
options.add_experimental_option("useAutomationExtension", False) # 禁用 使用自动扩展
options.add_experimental_option('excludeSwitches', ['enable-automation']) # 去掉'自动控制'提示
browser = webdriver.Chrome(options=options, executable_path=chromedriver_path) # 初始化
根据需要移动的距离生成步长list
def get_track(distance): # distance为传入的总距离
# 移动轨迹
track = []
# 当前位移
current = 0
# 减速阈值
mid = distance * 4 / 5
# 计算间隔
t = 0.2
# 初速度
v = 1
while current < distance:
if current < mid:
# 加速度为2
a = 4
else:
# 加速度为-2
a = -3
v0 = v
# 当前速度
v = v0 + a * t
# 移动距离
move = v0 * t + 1 / 2 * a * t * t
# 当前位移
current += move
# 加入轨迹
track.append(round(move))
return track
鼠标拖动方法
def move_to_gap(slider, tracks): # slider是要移动的滑块,tracks是要传入的移动轨迹
ActionChains(self.browser).click_and_hold(slider).perform() # 滑块元素上执行按下鼠标左键,并保持
for x in tracks:
print('移动步长:', x)
ActionChains(self.browser).move_by_offset(xoffset=x, yoffset=0).perform() # 根据坐标(相对位置)移动鼠标
time.sleep(0.31)
ActionChains(self.browser).release().perform() # 最后松开鼠标左键
url = 'https://www.geetest.com/show'
browser.get(url) # 打开网站
time.sleep(2)
# 通过find_element_by_xpath方法 找到//div[@class="tab-item tab-item-1"]元素 点击
browser.find_element_by_xpath('//div[@class="tab-item tab-item-1"]').click()
time.sleep(2)
# 点按呼出缺口
browser.find_element_by_xpath('//div[@aria-label="点击按钮进行验证"]').click()
time.sleep(2)
# 获取滑块元素
huakuai = browser.find_element_by_xpath('//div[@class="geetest_slider_button"]')
time.sleep(3)
xoffset = input('手动测量需要移动的距离:\n') # 使用截图工具计算滑块到缺口的距离(像素)
track_list = get_track(xoffset) # 获取步长
move_to_gap(slider, track_list) # 移动滑块
1.自动获取滑块所需移动的距离