Py学习记录
Python 常规学习
Python学习笔记(一)
Python学习笔记(二)
Python学习笔记(三)
Python学习笔记(四)
Python学习笔记(五)
Python学习笔记(六)
Python学习笔记(七)
Python习题(一)
Python习题(二)
Python习题(三)
Python习题(四)
Python习题(五)
Python常见Bug
Python编程环境
Python-依赖安装(三方库)
Python-VS Code
pip-换源
py 程序转 exe
Python-打开选择文件对话框
Python 项目
Python-密码学
Python-与佛伦禅
Python-喵语翻译
Python-翻译服务器
Python-邮件发送
Python-自动签到
Python-自动签到(Post请求)
Python-自动签到(模拟操作)
Python-图片添加二维码
Python-数据可视化
Python-端口扫描器
Python-未测试项目
Python-虚拟环境
Python-临时环境
Python-venv虚拟环境
Python-Conda
Python-OpenCV
OpenCV-人脸识别
Python-PyTorch
本文档使用 MrDoc 发布
-
+
首页
Python-自动签到(模拟操作)
模拟登录操作实现(不支持带任何验证形式的) 主要解决有些网站手动签到,使用 Cookie 会有过期问题的,和无法使用Post的(可能是技术不到家导致) 以下我将使用 [NS中文网](https://www.ns211.com/) 手动签到来举例 ```python # 模拟浏览器签到(支持输入密码,不会出现cookie过期问题,但不支持带任何验证的) # 使用 XPath 来进行定位,需改成实际的 XPath(可通过浏览器——开发者工具(F12)——定位到元素位置——右键复制——复制完整的XPath) from selenium import webdriver # 需安装 selenium 库要和 Chrome 版本对应 from selenium.webdriver.common.by import By # selenium(4.x版本) 后元素定位语法有更改了 import time # 预设登录的帐号 email = "ai773203918" # 你的账户 password = "ai773203918" # 你的密码 # 模拟浏览器打开网站 browser = webdriver.Chrome() # 打开 Chrome #browser.maximize_window() # 窗口最大化 browser.get('https://www.ns211.com/#login') # 打开指定页面 time.sleep(2) # 延迟指定时间,等待页面加载完成 browser.find_element(By.XPATH, "/html/body/div[2]/div/div[1]/button").click() # 模拟点击(关闭页面弹窗) browser.find_element(By.XPATH, "/html/body/div/header/div/div/div[4]/div[1]").click() # 模拟点击(打开登录窗口) # 找到登录表单,发送用户名和密码 browser.find_element(By.XPATH, "/html/body/div[2]/div/div[2]/div/div/div/div/div/div[1]/div/form/div[1]/input").send_keys(email) # 模拟填表单(填入账户) browser.find_element(By.XPATH, "/html/body/div[2]/div/div[2]/div/div/div/div/div/div[1]/div/form/div[2]/input").send_keys(password) # 模拟填表单(填入密码) browser.find_element(By.XPATH, "/html/body/div[2]/div/div[2]/div/div/div/div/div/div[1]/div/form/button").click() # 模拟点击(提交登录) time.sleep(5) # 延迟指定时间,等待页面加载完成 browser.get('https://www.ns211.com/7404.html') # 登录完成后进入签到页面 time.sleep(5) # 延迟指定时间,等待页面加载完成 browser.find_element(By.XPATH, "/html/body/div/div[2]/div/div[2]/div[1]/div/div/main/article/div[2]/div/div[1]/p[1]/span/strong/span/button").click() # 模拟点击(点击签到) browser.find_element(By.XPATH, "/html/body/div[2]/div/div[3]/button[1]").click() # 模拟点击(关闭弹窗提示) ``` ## 常用元素定位 ```python # XPath 定位 browser.find_element(By.XPATH, "/html/body/div[2]/button").click() # 完整 XPath 定位 browser.find_element(By.XPATH, "//button/span[text()='签到']").click() # 文本内容匹配(相等),//button/span 表示查找元素所在标签路径 browser.find_element(By.XPATH, "//button/span[contains(text(),'登录')]").click() # 文本内容匹配(包含),//button/span 表示查找元素所在标签路径 browser.find_element(By.XPATH, "//label[contains(text(),'输入用户名')]/following-sibling::input").send_keys(email) # 结合标签和文本内容,//label 查找元素所在标签,following-sibling::input 之后的input标签 browser.find_element(By.NAME, "username").send_keys(email) # 通过查找标签name定位(需唯一) browser.find_element(By.ID, "username").send_keys(email) # 通过查找标签id定位(需唯一) browser.find_element(By.CLASS_NAME, "input-class-name").send_keys(email) # 通过查找标签class定位(需唯一) browser.find_element(By.CSS_SELECTOR, "button.sign-in").click() # CSS 选择器定位 browser.find_element(By.LINK_TEXT, "登录").click() # 链接文本定位(通过连接的文本内容定位) browser.find_element(By.PARTIAL_LINK_TEXT, "登录").click() # 部分链接文本定位(通过连接的文本内容定位) browser.find_element(By.XPATH, "//input[@name='username' and @type='text']").send_keys(email) # 使用标签名和属性定位 browser.execute_script("document.evaluate('//button/span[text()=\"签到\"]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();") # 使用js定位并执行点击操作 ``` ## 元素定位方法 ```python # 利用ID查找 browser.find_element(By.ID, "value") # selenium(≥4.x版本) # browser.find_element_by_id("value") # selenium(<4.x版本) # 利用类名查找 browser.find_element(By.CLASS_NAME, "value") # browser.find_element_by_class_name("value") # 利用name属性查找 browser.find_element(By.NAME, "value") # browser.find_element_by_name("value") # 利用标签名查找 browser.find_element(By.TAG_NAME, "value") # browser.find_element_by_tag_name("value") # 利用xpath查找 browser.find_element(By.XPATH, "value") # browser.find_element_by_xpath("value") # 利用CSS选择器查找 browser.find_element(By.CSS_SELECTOR, "value") # browser.find_element_by_css_selector("value") ``` **相关教程:** [关于新版本selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘等问题](https://blog.csdn.net/m0_49076971/article/details/126233151)
造物者W
2024年12月26日 13:29
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码