selenium库
当前selenium版本4.7.2
打开Chrome
selenium通过driver调起本地安装的浏览器,需要调用同本地Chrome浏览器版本对用chromedriver才能成功调起。
(版本不一致会导致报错:Message: unknown error: Runtime.executionContextCreated has invalid 'context)
(‘chromedriver’ executable needs to be in PATH)
- 查看本地安装的chrome版本
- 获取对应版本的chromedriver
- 通过chromedriver调起chrome浏览器。
#windows env
from selenium import webdriver
browser = webdriver.Chrome(executable_path = r'xxx\chromedriver.exe')
browser.get("http://www.baidu.com")
print(browser.page_source)
#browser.close()
窗口操作
browser.maximize_window() #窗口最大化
driver.switch_to.window(driver.window_handles[-1]) #定位到最新打开窗口
driver.switch_to.window(driver.window_handles[-2]) #定位到倒数第二个窗口
driver.switch_to.window(driver.window_handles[0]) #定位最开始的页面
元素获取
from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome(chromeDriverPath)
browser.find_element(By.XPATH,'//*[@id="kw"]').send_keys("python")
browser.find_element(By.CLASS_NAME,'soutu-btn').click()
browser.find_element(By.ID,'su').click()
By.xx元素定位方式
class By:
"""
Set of supported locator strategies.
"""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
元素操作
- get(url) 打开网页
- send_keys(str) 输入
- click() 点击
- clear() 清空
- text 获取标签文本内容
- get_attribute(‘属性’) 获取元素属性值
- close() 关闭当前标签页
- quit() 关闭浏览器,释放进程
add_argument相关
from selenium.webdriver.chrome.options import Options
options = Options()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
browser = webdriver.Chrome(chromeDriverPath,chrome_options = option)
option.add_argument('--ignore-cetificate-errors') #清除提示:chrome正受到自动测试软件的控制
option.add_argument('--ignore-ssl-errors') # 忽略ssl错误
options.add_argument('headless') #隐藏浏览器运行
#调起的浏览器不弹出记住密码
prefs = {"": ""}
prefs["credentials_enable_service"] = False
prefs["profile.password_manager_enabled"] = False
options.add_experimental_option("prefs", prefs)
iframe切换
iframe = driver.find_elements(By.TAG_NAME,'iframe')[0] #找到网页中第一个iframe
driver.switch_to.frame(iframe) #将driver切换到iframe的html
textcontent = driver.find_element(By.ID,'viewer').text #获取iframe中id='viewer'的文本内容
selenium 自动化过程遇到浏览器显示:您的连接不是私密连接的网站
# 跳过私密链接
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--ignore-certificate-errors')
driver=webdriver.Chrome(options=options)
chrome_options.add_argument('--headless')
同脚本下的二次登录
不要driver.quit(),可以使用同一个driver完成两次登录。
进度条
用于固定时间等待
import time
def ProcessBar(waiting):
scale,i = 50,0
wait_per_second = waiting/100
start = time.perf_counter()
while i<101:
a = '*' * (i//2)
b = '.' * (scale - i//2)
c = (i / scale) * scale
dur = time.perf_counter() - start
print("\r{:^3.0f}%[{}-->{}]{:.2f}s".format(c, a, b, dur), end='')
time.sleep(wait_per_second)
i+=1
ProcessBar(12) #12s
用于随机时间等待 放在while try except
import time
for i in range(0,10):
s = '*'*i
time.sleep(1)
print("\r[{}]".format('waiting'+s),end='')
问题
USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: 连到系统上的设备没有发挥作用。 (0x1F)
option = webdriver.ChromeOptions()
# 防止打印一些无用的日志
option.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])
driver = webdriver.Chrome(options=option)
命令总结
#获得同级目录下div数目
item = driver.find_elements_by_xpath("//section[@class='content']/div/div/div")
print('\n',len(item))
webelement对象属性
在这里插入代码片
linux本地测试
重点是结合shell脚本完成各种测试任务。
signal 跳出
用于一些执行语句失败无法跳出的情况。
import os,signal
temp = os.popen(command)
signal.signal(signal.SIGALRM, self.recall)
#定时2秒,超时则执行回调函数
signal.alarm(2)
output = temp.read() #给语句两秒时间返回
def recall(self,signum, frame):
self.log_file.write("测试未在指定时间内退出,脚本中止执行。" + '\n')
self.log_file.close()
print("测试未在指定时间内退出,脚本中止执行。")
return False
ubuntu使用selenium
-
安装chrome
- [下载](https://www.chromedownloads.net/chrome64linux/) https://www.google.cn/chrome/ - 解压,这里选择百度网盘下载,解压后将deb文件传到ubuntu。 - 安装gdebi `apt install gdebi` - 安装chrome `gdebi google-chrome-stable_current_amd64.deb`
-
安装对应版本的chrome driver
- ubuntu打开浏览器查看安装的chrome版本,找到对应版本的chromedriver并下载。https://registry.npmmirror.com/binary.html?path=chromedriver/ - 下载,解压出hromedriver。 - 移动 `mv chromedriver /usr/bin/` - 给与执行权限 `chmod +x /usr/bin/chromedriver` - 查看版本 `chromedriver -version`
-
运行测试
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver import ActionChains chrome_options = Options() chrome_options.add_argument('--ignore-certificate-errors') # chrome_options.add_argument('--headless') driver = webdriver.Chrome(options=chrome_options) driver.get('https://www.baidu.com/')
Python Playwright
https://blog.csdn.net/zz00008888/article/details/127950173
Xpath获取相关
https://blog.csdn.net/weixin_43865008/article/details/115332404