# 版本
python==3.7.3
selenium==4.0.0a1
# selenium pypi地址
https://pypi.org/project/selenium/
目錄:
一、初始化
二、元素查找
三、select標籤操作
四、執行js腳本
五、iframe操作
六、動作和動作鏈
七、異常處理
八、退出程序
一、初始化
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# 新版的webdriver.chrome默認指定了谷歌瀏覽器的驅動程序位置,如果要自定義位置,需要實例化一個Service對象
service = Service(executable_path=revoction_config.chromedriverpath)
driver = webdriver.Chrome(service=service)
driver.implicitly_wait(5) # 隱式等待未加載的元素
driver.get('http://www.baidu.com')
# 無頭模式配置
opt = webdriver.ChromeOptions() # 創建chrome對象
opt.add_argument('--no-sandbox') # 啓用非沙盒模式,linux必填
opt.add_argument('--disable-gpu') # 禁用gpu,linux部署需填,防止未知bug
opt.add_argument('headless') # 啓用無頭模式
driver = webdriver.Chrome(options=opt)
driver.implicitly_wait(5) # 隱式等待未加載的元素
driver.get('http://www.baidu.com')
二、元素搜索
-
直接搜索
# 一次查找一個 driver.find_element_by_id # 按id屬性 driver.find_element_by_name # 按name屬性 driver.find_element_by_xpath # 按XPath driver.find_element_by_link_text # 按<a>標籤中的text過濾 driver.find_element_by_partial_link_text # 按<a>標籤中的text過濾,包含某字符串的text driver.find_element_by_tag_name # 按標籤名 driver.find_element_by_class_name # 按類屬性 driver.find_element_by_css_selector # 通過css選擇器查找 # 一次查找多個元素 (這些方法會返回一個list列表) driver.find_elements_by_name driver.find_elements_by_xpath driver.find_elements_by_link_text driver.find_elements_by_partial_link_text driver.find_elements_by_tag_name driver.find_elements_by_class_name driver.find_elements_by_css_selector
2.使用By方法.
# 使用by方法和使用"直接搜索"的方式是一樣的,只是書寫不同
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH,Expression)
同等於
driver.find_element_by_xpath(Expression)
# 查找name屬性等於username的input標籤
driver.find_element(By.XPATH,"//input[@name='username']")
# 查看name屬性以user開頭的標籤
driver.find_element(By.XPATH,"//input[starts-with(@name='username')]")
# 如果你搜索出來的是多個元素
driver.find_elements()
3.XPath
XPath
有兩種搜索方式,一種是絕對路徑
一種是相對路徑
.
-
找到
body
中類屬性爲username
的div
標籤.# 絕對路徑示例: "/html/body/div[@class='username']" # 相對路徑示例: "//div[@class='username']"
-
獲取
tbody
標籤下所有的子標籤."/table/tbody/*"
-
獲取
class
屬性爲username
的<a>
標籤後的第一個標籤./a[@class='username']/following-sibling::li[1]
-
查看
name
屬性以user
開頭的標籤."//input[starts-with(@name='username')]"
三、select
標籤操作(官方稱之爲:UI Support
).
from selenium.webdriver.support.select import Select
# step 1: 查找select標籤並且示例化.
select_element = driver.find_element(By.XPATH,"//select[@class='address']")
select = Select(select_element)
# step 2: 通過option的text文本選中
select.select_by_visible_text('北京')
四、執行js
腳本.
# 比如在select標籤中你想要的option不存在
java_scripts_text = '''d = document.getElementById('address');d.options.add(new Option("{0}","{0}"));'''.format('北京')
driver.execute_script(java_scripts_text)
# 然後再實例化Select並且選擇text爲北京的option即可
五、iframe
操作.
要想操作iframe裏面的元素,必須先進入iframe.
# 首先找到iframe標籤
i = driver.find_element(By.XPATH, "//iframe")
# 進入iframe
driver.switch_to.frame(i)
# 退出iframe
driver.switch_to.default_content()
六、動作和動作鏈(官方稱之爲:Action Chains
).
-
動作
# 在input元素中輸入text input_element = find_element(By.XPATH,"//input[@name='username']") input_element.send_keys('xiaoming') # 點擊元素 a_element = find_element(By.XPATH,"//a[@class='baidu']") a_element.click()
-
動作鏈
from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys # 按住Ctrl鍵然後按鼠標左鍵點擊a標籤 a_element = find_element(By.XPATH,"//a[@class='baidu']") ac = ActionChains(driver) # 首先移動到a標籤,然後按下左邊的Ctrl鍵,再點擊鼠標左鍵,最後釋放左邊的Ctrl鍵,並且執行這個動作鏈 ac.move_to_element(a_element).key_down(Keys.LEFT_CONTROL).click().key_up(Keys.LEFT_CONTROL).perform() # 釋: key_down(): 按下某鍵 key_up(): 釋放某鍵 send_keys(): 按下並且釋放某鍵 click(): 單機鼠標左鍵 perform(): 執行動作鏈
七、異常處理(官方稱之爲:Exceptions
).
異常處理的類都在selenium.common.exceptions.*
中,要想捕捉selenium
的異常,必須先導入對象的類
from selenium.common.exceptions import NoSuchElementException
try:
a_element = driver.find_element(By.PARTIAL_LINK_TEXT, '百度')
except NoSuchElementException:
print("沒有找到text爲百度的a標籤.")
八、退出程序.
driver.quit()