亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python selenium使用入門

發布時間:2020-08-06 14:21:23 來源:網絡 閱讀:734 作者:小生博客 欄目:編程語言
# 版本
    python==3.7.3
    selenium==4.0.0a1

# selenium pypi地址
https://pypi.org/project/selenium/

在目錄前提示一下,有時候我們在獲取了一組元素,然后進行循環時,會報錯'陳舊的元素.....',為了避免這個錯誤,建議在需要處理一組元素時,我們先算出元素的數量,然后通過range(element_counter),來通過索引值再次搜索需要處理的元素.

目錄:
一、初始化
二、元素查找
三、select標簽操作
四、執行js腳本
五、通過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')

二、元素搜索

  1. 直接搜索

    # 一次查找一個
    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,"http://input[@name='username']")

   # 查看name屬性以user開頭的標簽
   driver.find_element(By.XPATH,"http://input[starts-with(@name,'username')]")

   # 如果你搜索出來的是多個元素
   driver.find_elements()

3.XPath

XPath有兩種搜索方式,一種是絕對路徑一種是相對路徑.

  • 找到body中類屬性為usernamediv標簽.

     # 絕對路徑示例:
     "/html/body/div[@class='username']"
    
     # 相對路徑示例:
     "http://div[@class='username']"
  • 獲取tbody標簽下所有的子標簽.

     "/table/tbody/*"
  • 獲取class屬性為username&lt;a&gt;標簽后的第一個標簽.

     /a[@class='username']/following-sibling::li[1]
  • 查看name屬性以user開頭的標簽.

     "http://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,"http://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即可

五、通過js操作被遮擋元素


baidu_button = driver.find_element(By.XPATH,"http://a[@name='baidu']")
driver.execute_script("arguments[0].click();", baidu_button)

六、iframe操作.

要想操作iframe里面的元素,必須先進入iframe.
# 首先找到iframe標簽
i = driver.find_element(By.XPATH, "http://iframe")
# 進入iframe
driver.switch_to.frame(i)
# 退出iframe
driver.switch_to.default_content()

七、動作和動作鏈(官方稱之為:Action Chains).

  1. 動作

    # 在input元素中輸入text
    input_element = find_element(By.XPATH,"http://input[@name='username']")
    input_element.send_keys('xiaoming')
    
    # 點擊元素
    a_element = find_element(By.XPATH,"http://a[@class='baidu']")
    a_element.click()
  2. 動作鏈

    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    
    # 按住Ctrl鍵然后按鼠標左鍵點擊a標簽
    a_element = find_element(By.XPATH,"http://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標簽.")

九、顯式等待和預期條件.


WebDriverWait(WebDriver實例, 最長等待時間, 每次檢測時隔, 忽略的異常)

# 等待符合條件的元素加載出來,如果加載成功則返回WebElement
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    locator = (By.ID, "username")
    WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))

    注意: 注意你需要等待的是一組元素,則使用'presence_of_all_elements_located'實現.

# 判斷元素是否可見并且可以點擊,如果可以返回元素,不可以返回False
    WebDriverWait(driver, 20, 0.5).until(EC.element_to_be_clickable(locator))

    可見時點擊
    WebDriverWait(driver, 20, 0.5).until(EC.element_to_be_clickable(locator)).click()

十、退出程序.

driver.close()
driver.quit()
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乡城县| 澄江县| 应城市| 西平县| 鄂州市| 德格县| 崇仁县| 林州市| 青阳县| 延安市| 沂源县| 隆德县| 建宁县| 马边| 桐乡市| 古浪县| 永康市| 阳朔县| 顺平县| 含山县| 黄冈市| 大渡口区| 温泉县| 拜泉县| 邵武市| 商丘市| 邵阳县| 安福县| 武宣县| 南丰县| 金华市| 红桥区| 金昌市| 昌黎县| 墨竹工卡县| 吴桥县| 顺义区| 镇雄县| 汝阳县| 抚宁县| 济阳县|