Python Selenium 搜索和點擊示例代碼
Python Selenium 搜索和點擊
?? 1. 環(huán)境準備
- 安裝依賴
安裝 Selenium 庫并配置瀏覽器驅(qū)動(以 Chrome 為例):
uv add selenium webdriver-manager # 自動管理驅(qū)動版本
- 初始化瀏覽器
使用 webdriver-manager 自動處理驅(qū)動路徑問題:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) driver.maximize_window() # 最大化窗口避免元素遮擋
?? 2. 執(zhí)行 Google 搜索
輸入關(guān)鍵詞并提交
定位 Google 搜索框并模擬回車鍵提交搜索:
from selenium.webdriver.common.keys import Keys
driver.get("https://www.google.com")
search_box = driver.find_element("name", "q") # 通過 name 定位搜索框
search_box.send_keys("Python 自動化測試")
search_box.send_keys(Keys.RETURN) # 回車提交搜索??? 3. 定位并點擊搜索結(jié)果
等待結(jié)果加載
使用顯式等待確保結(jié)果加載完成,避免因網(wǎng)絡(luò)延遲失敗:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 等待結(jié)果區(qū)域出現(xiàn)(最長10秒)
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div.g"))
)- 點擊指定結(jié)果
方案1:點擊特定位置結(jié)果(如第一條)
first_result = driver.find_element(By.CSS_SELECTOR, "div.g a") # 定位第一條結(jié)果的鏈接 first_result.click()
方案2:隨機點擊一個結(jié)果
from random import choice all_results = driver.find_elements(By.CSS_SELECTOR, "div.g a") # 獲取所有結(jié)果鏈接 random_result = choice(all_results) # 隨機選擇一個 random_result.click()
?? 4. 處理特殊情況
元素不可點擊時
若普通點擊失效(如元素被遮擋),用 JavaScript 強制執(zhí)行點擊:
driver.execute_script("arguments[0].click();", random_result)過濾廣告鏈接
通過選擇器排除廣告區(qū)域(通常包含 class="ads" 的元素):
valid_results = driver.find_elements(By.XPATH, '//div[@class="g"]/a[not(ancestor::div[@class="ads"])]')
??? 5. 完整代碼示例
實際上,檢索的代碼會發(fā)生變化,需要我們?nèi)鐚嵳{(diào)整,實測有效的代碼如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from random import choice
options = webdriver.ChromeOptions()
# 繞過人機檢測
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
driver = webdriver.Chrome(options=options)
driver.get("https://www.google.com")
# 搜索關(guān)鍵詞
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Python Selenium 教程")
search_box.send_keys(Keys.RETURN)
# 等待結(jié)果加載
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div.b8lM7"))
)
results = driver.find_elements(By.CSS_SELECTOR, "a h3")
if results:
target = choice(results)
target.click() # 或 driver.execute_script("arguments[0].click();", target)
else:
print("未找到有效結(jié)果")
# 后續(xù)操作(如數(shù)據(jù)提?。?
print("當前頁面標題:", driver.title)
# 關(guān)閉瀏覽器
driver.quit()
?? 6. 關(guān)鍵注意事項
- 反爬蟲機制:Google 會檢測自動化行為,需控制頻率(如添加
time.sleep(2)),避免 IP 被封。 - 元素定位更新:Google 頁面結(jié)構(gòu)可能變化,若 CSS 選擇器失效需調(diào)整(如改用 XPath)。
- 瀏覽器兼容性:若使用 Firefox 或 Edge,需替換為對應(yīng)驅(qū)動(如
GeckoDriverManager)。
此方案覆蓋了從環(huán)境配置到動態(tài)交互的全流程,適用于自動化測試或數(shù)據(jù)采集場景。實際使用時建議結(jié)合異常處理(如
try/except)增強穩(wěn)定性。
到此這篇關(guān)于Python Selenium 搜索和點擊示例代碼的文章就介紹到這了,更多相關(guān)Python Selenium搜索和點擊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python解析網(wǎng)頁上的json數(shù)據(jù)并保存到EXCEL
這篇文章主要為大家詳細介紹了如何使用python解析網(wǎng)頁上的json數(shù)據(jù)并保存到EXCEL,文中的示例代碼講解詳細,感興趣的可以了解下2024-11-11
python統(tǒng)計中文字符數(shù)量的兩種方法
今天小編就為大家分享一篇python統(tǒng)計中文字符數(shù)量的兩種方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
python 解決數(shù)據(jù)庫寫入時float自動變?yōu)檎麛?shù)的問題
這篇文章主要介紹了python 解決數(shù)據(jù)庫寫入時float自動變?yōu)檎麛?shù)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
用python-webdriver實現(xiàn)自動填表的示例代碼
這篇文章主要介紹了用python-webdriver實現(xiàn)自動填表的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-01-01
Python基于requests實現(xiàn)模擬上傳文件
這篇文章主要介紹了Python基于requests實現(xiàn)模擬上傳文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
Django debug為True時,css加載失敗的解決方案
這篇文章主要介紹了Django debug為True時,css加載失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04

