selenium初体验
1、为什么要用到selenium?
由于项目中要对接第三方系统,没有开发的对接API,于是乎想起了用强大的selenium模拟登录,调试中遇到了常见的一些动作点击、下滑、选中、处理弹窗,切換窗口等
2、环境的准备(模块、浏览器驱动)
-
pip install -i https://pypi.douban.com/simple selenium
-
安装浏览器驱动,下载与对应的版本: https://chromedriver.storage.googleapis.com/index.html
安装路径放在Python安装的位置:C:\Python\Python38\
3、Linux环境快捷安装环境
-
安装脚本,执行sh install.sh 即可
测试环境问题
运行selenium代码
新建一个test_demo.py文件,运行测试代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless') # 无界面
chrome_options.add_argument('--no-sandbox') # 解决DevToolsActivePort文件不存在报错问题
chrome_options.add_argument('--disable-gpu') # 禁用GPU硬件加速。如果软件渲染器没有就位,则GPU进程将不会启动。
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--window-size=1920,1080') # 设置当前窗口的宽度和高度
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
#driver = webdriver.Chrome()
driver.get("https://www.cnblogs.com/")
print(driver.page_source)
driver.quit()
4、打开网页开始找规律,编写代码
亚信 iframe 问题 正常的xpath路径去点击,查找不到路径的报错问题
第二层ifram标签包裹 必须切换 否则会报错,找不到xpath路径问题,driver.switch_to.default_content()
代码实例:
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
class Suite:
def __init__(self, url, user, pwd):
self.url = url
self.user = user
self.pwd = pwd
# self.scan_ip = scan_ip
self.driver = None
def teardown_method(self):
self.driver.quit()
# 根据某个IP进行查杀
def kill_virus(self):
try:
opt = webdriver.ChromeOptions()
# 不弹窗
opt.add_argument('--headless')
opt.add_argument('--no-sandbox')
opt.add_argument('--ignore-certificate-errors')
opt.add_argument('--allow-insecure-localhost')
# chrome_options.add_argument('--incognito') # 隐身模式(无痕模式)
# chrome_options.add_argument('–disable-software-rasterizer')
self.driver = webdriver.Chrome(chrome_options=opt)
self.driver.get(self.url)
# 登录
self.driver.find_element_by_xpath('//*[@id="username"]').send_keys(self.user)
self.driver.find_element_by_xpath('//*[@id="password"]').send_keys(self.pwd)
self.driver.find_element_by_xpath('//*[@id="signinButton"]').click()
self.driver.implicitly_wait(3)
# 点击 管理
self.driver.find_element_by_xpath('//*[@id="tab_administration"]/a').click()
self.driver.implicitly_wait(5)
# 截图方便调试
# self.driver.get_screenshot_as_file("yaxin.png")
# 点击 预设任务
time.sleep(3)
# 切换 iframe 元素;标签
iframe = self.driver.find_element_by_xpath('//*[@id="menu"]')
self.driver.switch_to_frame(iframe)
# self.driver.get_screenshot_as_file("yaxin2.png")
# self.driver.find_element_by_xpath('//*[@id="menu_scheduledTasks_text"]').click()
stp1 = self.driver.find_element(By.XPATH, '//*[@id="menu_scheduledTasks_text"]/span')
self.driver.execute_script("$(arguments[0]).click()", stp1)
# 内嵌 得切换回iframe首页默认
self.driver.switch_to.default_content()
iframe = self.driver.find_element_by_xpath('//*[@id="content_iframe"]')
self.driver.