【bugo】【python web自动化】【selenium】python实现web自动化工具使用重点分析
问题现象
之前听别人介绍过关于web自动化使用python实现,但是实践过程中还是遇到了不少问题,一一记录,难点。避免来回踩坑,针对某些场景下,无法通过接口来完成自动化的场景(例如一个按钮挂了超多的接口等等,你猜指的哪个按钮)。然后你需要重复点击步骤的时候,通过自动化selenium实现,确实会省去很多功夫。 前文有点长了。。。。
本文只展示部分关键代码
根因
1.chromedriver.exe下载难。
第一关就被难倒了,主要是一直没找到,很多网站推荐的是这个google的网站。
http__chromedriver.storage.googleapis.com/index.html
但实际这个网站只能下载113老版本的,一定要使用你浏览器对应的版本才行
你可以输入chrome://version/进行查看版本号
然后替换下面链接的版本号,反正我是通过这种的,我也不知道你的行不行
https__storage.googleapis.com/chrome-for-testing-public/141.0.7390.122/win64/chromedriver-win64.zip
通过这个网站找到上面的链接的,也把原始地址发出来吧:
https__googlechromelabs.github.io/chrome-for-testing/
2.定位元素 xpath
这个刚开始接触的时候最难的,因为自动化肯定要锁定元素,模拟操作。
这个也只能多试几遍了,多尝试。个人浅解xpath最简单,虽然我现在对xpath还是不熟
最简单的定位格式 xpath=“//div[@class=”" and @type=“”]//div[@class=“” and @type=“”]"
其中div为元素, 至于两个div是否挨着,隔了几层,这些都没关系,你只需要保证是前面包含后面就可以了,大概率不会有问题
3.模拟点击 execute_script
一般来说只有btn按钮才能点击,但实际web中,很多都是js触发的点击,不是实际的按钮,可能只是一个元素
就不能定位到元素后,直接click,用js模拟
driver.execute_script("arguments[0].click();", phone_code_submit_button)
4. 等待元素加载完成
由于selenium是模拟web操作,自然页面就会有个加载的过程,如果过早模拟点击,就会失败,或者找不到元素,需要等待页面加载完成,一般有两种方式,建议使用第二种,当然两种可以一起用
1.time.sleep() 2.webDriverWait EC
time.sleep(2)
# 定位弹窗中的“获取验证码”按钮
phone_code_submit_button = WebDriverWait(driver, 5).until(
EC.element_to_be_clickable((By.XPATH, '//div[@class="button-base-box2"]//div[@class="dialog-btn dialog-btn"]'))
)
#phone_code_button.click()
driver.execute_script("arguments[0].click();", phone_code_submit_button)
5.引入错依赖 webDriverWait EC
上面介绍的依赖,如果你直接import,可能会引入错误,会引入同名的另一个框架。一定要认准这个,否则你会怀疑人生,一直报错
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
6.driver,重要变量
driver能帮助我们操作很多东西,例如网页打开、cookie获取、元素获取等等,都是基于driver操作,所以你想要获取一个东西,但是不知道怎么获取,可以尝试通过driver获取,或者百度一下
我就简单列举一下,我用到的吧
# 打开网址
driver.get('')
# 定位元素
#username_input = driver.find_element(By.XPATH, '//form//input[@type="password" and @class="input"]')
# 配合webderiverwate定位元素
username_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//form//input[@class="userAccount"]'))
)
# 模拟点击
#button.click()
driver.execute_script("arguments[0].click();", _button)
# 获取cookie
cookies = driver.get_cookies()
#关闭浏览器
driver.quit()
解决方案
关键代码展示
能读到这,看来你确实是新手,我展示部分关键代码,希望能帮助到你
# 指定ChromeDriver的路径
chrome_driver_path = 'D:\\xx\\xx\\xx\\chromedriver.exe'
# 创建一个Service对象
service = Service(executable_path=chrome_driver_path)
# 创建Chrome浏览器实例
driver = webdriver.Chrome(service=service)
# 打开目标网站
driver.get('url')
# 使用相对路径定位用户名输入框 todo 需要替换自己的元素
username_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//form//input[@class="userAccount"]'))
)
# 输入值
username_input.send_keys('userAccount')
# 定位点击元素
login_button = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//div//div[@class="login_btn"]'))
)
# 模拟点击
# login_button.click()
driver.execute_script("arguments[0].click();", login_button)
# 关闭浏览器
time.sleep(10)
driver.quit()
好人到底吧,把import也弄出来
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
- 点赞
- 收藏
- 关注作者
评论(0)