Selenium使用(本资料以Google Chrome举例)
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。
安装
Windows:
pip install selenium
Mac、Linux:
pip3 install selenium
基本使用
1.创建浏览器对象并加载页面
from selenium import webdriver
browser = webdriver.Chrome()
URL = 'https://www.baidu.com/'
browser.get(URL)
2.打印页面源码
from selenium import webdriver
browser = webdriver.Chrome()
URL = 'https://www.baidu.com/'
browser.get(URL)
print(browser.page_source)
3.基本配置
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--hide-scrollbars')
options.add_argument('blink-settings=imagesEnabled=false')
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument('--headless')
option.add_argument('--proxy-server=socks5://代理服务器:端口')
options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])
browser = webdriver.Chrome(options=options)
browser.execute_cdp_cmd(
"Page.addScriptToEvaluateOnNewDocument",
{
"source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
}
)
URL = 'https://www.baidu.com/'
browser.get(URL)
4.控制浏览器窗口的大小
browser.set_window_size(800, 800)
browser.maximize_window()
5.页面滚动
max_y = 5000
y = 0
while y <= max_y:
browser.execute_script(f'window.scrollTo(0,{y})')
y += 500
time.sleep(1)
6.前进后退
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
time.sleep(1)
browser.get('https://www.taobao.com/')
time.sleep(1)
browser.get('https://www.jd.com/')
time.sleep(1)
browser.back()
time.sleep(1)
browser.forward()
7.浏览器选项卡切换
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
browser.execute_script('window.open()')
browser.switch_to.window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(1)
browser.switch_to.window(browser.window_handles[0])
8.获取cookies
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
cookies = browser.get_cookies()
browser.add_cookie(cookies)
browser.delete_all_cookies()
print(browser.get_cookies())
9.查找单个元素
from selenium import webdriver
browser = webdriver.Chrome()
URL = 'https://www.baidu.com/'
browser.get(URL)
browser.find_element_by_id('s_lg_img').get_attribute('src')
browser.find_element_by_css_selector('#kw')
10.查找多个元素
查找多个元素和查找单个元素相同,仅仅是将find_element 换成了find_elements ,
同时,find_element 与find_elements 的区别就相当于select_one 和select 的区别一样。
11.关闭浏览器窗口
browser.close()
browser.quit()
"""
二者区别:
close方法是关闭当前的选项卡,如果是打开了多个选项卡,那么close关闭的是browser操作的当前选项卡,如果当前浏览器只打开一个选项卡,那么close方法相当于关闭浏览器了;
quit方法则是完全关闭所有选项卡,关闭浏览器。
那么问题来了,我们关闭浏览器应该采用那个方法呢?
当我们用webdriver打开浏览器时,会在系统盘产生临时文件,
如果使用close方法关闭浏览器,并不会主动清除系统盘的临时文件,
反之使用quit方法完全关闭浏览器会自动清除临时文件,减少对系统盘空间的占用。
所以,当你浏览器打开多选项卡时,只想关闭当前选项卡,就用close方法,但是关闭浏览器最好使用quit方法。
"""
12.元素交互动作
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
URL = 'https://www.baidu.com/'
browser.get(URL)
browser.find_element_by_id('s_lg_img').get_attribute('src')
search = browser.find_element_by_css_selector('#kw')
search.send_keys('手机')
search.send_keys(Keys.ENTER)
search_btn = browser.find_element_by_css_selector('#su')
search_btn.click()
browser.switch_to.frame('id或name属性')
browser.switch_to.default_content()
13.等待
from selenium import webdriver
browser = webdriver.Chrome()
browser.implicitly_wait(10)
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Chrome()
browser.get('https://www.taobao.com/')
wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(input, button)
|