selenium官方文档
Selenium 相当于是一个机器人,可以模拟人类在浏览器上的操作
下载浏览器驱动
只有通过浏览器驱动才可以操作浏览器 以 Chrome 浏览器为例,需要下载 ChromeDriver,需要对应自己安装的浏览器版本下载相应的驱动, Chrome驱动下载
Selenium 使用
获取网页源代码
from selenium import webdriver
driver_path = r"驱动安装路径"
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)
driver = webdriver.Chrome(driver_path,options=option)
driver.get("要打开的网页")
print(driver.page_source)
操作页面 / 浏览器
driver.execute.script("window.open('http://www.baidu.com')")
driver.switch_to.window(driver.window_handles[1])
driver.close()
driver.quit()
元素定位
input_test = driver.find_element_by_id("input1")
input_test = driver.find_element_by_class_name("inputclass")
input_test = driver.find_elements_by_class_name("inputclass")
input_test = driver.find_element_by_name("input1")
input_test = driver.find_elements_by_name("input1")
input_test = driver.find_element_by_xpath("//input[@id='input1']")
input_test = driver.find_elements_by_xpath("//input[@id='input1']")
input_test = driver.find_element_by_css_selector("div #inputclass")
input_test = driver.find_elements_by_css_selector("div #inputclass")
input_test = driver.find_element_by_tag_name("input")
input_test = driver.find_elements_by_tag_name("input")
操作表单元素
input_test = driver.find_element_by_id("input1")
input_test.send_keys("python")
input_test = driver.find_element_by_id("checkbox1")
input_test.click()
from selenium.webdriver.support.ui import Select
select_tag = Select(driver.find_element_by_id("languageSelect"))
select_tag.select_by_index(1)
select_tag.select_by_value('value')
select_tag.select_by_visible_text('显示的文本')
行为链
更人性化的模拟网页操作 1、避免网站在浏览器端通过解析用户操作步骤判断是否是爬虫行为 2、对于测试人员来说,更方便自己实现自动化测试
行为链支持很多鼠标行为,比如双击、点击后不松开等 官网文档
from selenium.webdriver import ActionChains
input_test = driver.find_element_by_id("input1")
input_search= driver.find_element_by_id("searchbtn")
actions = ActionChains(driver)
actions.move_to_element(input_test )
actions.send_keys_to_element(input_test ,'输入的文本')
actions.move_to_element(input_search)
actions.click(input_search)
actions.perform()
操作 Cookie
cookies = driver.get_cookies()
cookie = driver.get_cookie('cookieName')
driver.add_cookie({'name':'name','value':'value'})
driver.delete_cookie('cookieName')
driver.delete_all_cookies()
页面等待
现在的网页大部俄方那都是采用了 Ajax 技术,因此不能判断元素是不是在一开始就已经加载了,所以我们需要等待页面元素加载完。
-
隐式等待 ...
driver.implicitly_wait(4)
-
显式等待
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
...
try:
WebDriverWait(driver,10).util(
expected_conditions.presence_of_element_located((By.ID,"input"))
expected_conditions.text_to_be_present_in_element_value((By.ID,"input"),'测试文本')
)
...
finally:
driver.quit()
设置代理
options = webdriver.ChromeOptions()
driver_path = r"驱动安装路径"
driver.switch_to.window(driver.window_handles[1])
option.add_argument("--proxy-server = http://xxx.xx.xx.xxx:xxxx")
driver = webdriver.Chrome(driver_path,options=option)
driver.get("网页地址")
|