一些登录页面会有滑块验证,如下图:
首先尝试用selenium按住滑块,脚本如下:
el1 = driver.find_element_by_xpath('//*[@id="nc_1_n1z"]') # 按住滑块 ActionChains(driver).click_and_hold(on_element=el1).perform() ActionChains(driver).move_to_element_with_offset(to_element=el1, xoffset=400, yoffset=0).perform() # 滑动滑块
xoffset表示向右移动,向左则为负,yoffset表示向下移动
但是发现还不行,滑块对自动化程序作了限制,那么只有使用js改window.navigator.webdriver为false了
script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'
driver.execute_script(script) # 运行Javascript
完整代码如下:
def onwork_login(**param_dict): driver = webdriver.Chrome() driver.get("要导航到的网址") # 导航到onwork页面 driver.find_element_by_xpath('//*[@id="details-button"]').click() # 点击高级按钮 driver.find_element_by_xpath('//*[@id="proceed-link"]').click() # 点击继续前往 driver.find_element_by_xpath('//*[@id="app"]/div/div[1]/div/div/a[1]').click() # 点击右上方登录 driver.find_element_by_xpath('//*[@id="pane-first"]/div/form/div[1]/div/div/input').send_keys( param_dict['username']) # 输入用户名 driver.find_element_by_xpath('//*[@id="pane-first"]/div/form/div[2]/div/div[1]/input').send_keys( param_dict['password']) # 输入密码 ''' js改window.navigator.webdriver属性为false''' script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});' driver.execute_script(script) # 运行Javascript el1 = driver.find_element_by_xpath('//*[@id="nc_1_n1z"]') # 按住滑块 ActionChains(driver).click_and_hold(on_element=el1).perform() ActionChains(driver).move_to_element_with_offset(to_element=el1, xoffset=400, yoffset=0).perform() # 滑动滑块 time.sleep(1) driver.find_element_by_xpath('//*[@id="pane-first"]/div/button/span').click() # 点击登录
参考:
https://www.cnblogs.com/carlvine/p/15134307.html
https://blog.csdn.net/qq_41338249/article/details/107622186
https://blog.csdn.net/weixin_39861627/article/details/111018765?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-4.control&spm=1001.2101.3001.4242
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!