uj5u.com熱心網友回復:
嘗試使用以下代碼一次。
導航到網站一次,可用于driver.back()回傳原始頁面。
用戶顯式等待等待元素出現。并且可以使用良好的定位器如ID或CLASS_NAME來定位元素。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
def scrape_individual_info_wp(driver, individual_name, city_state):
name_field = wait.until(EC.element_to_be_clickable((By.ID, "desktopSearchBar")))
name_field.clear() # Clear the field to enter a new name
name_field.send_keys(individual_name)
state_field = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "pa-3")))
state_field.clear() # Clear the field and enter the state
state_field.send_keys(city_state)
search = wait.until(EC.element_to_be_clickable((By.ID, "wp-search")))
search.click()
time.sleep(2) # Using Sleep to make sure the data is loaded. Can use Waits to wait for the data to appear and extract the same.
# Code to scarpe data.
driver.back()
driver = webdriver.Chrome(service= Service("C:/expediaproject/Chromedriver/chromedriver.exe"))
driver.maximize_window()
wait = WebDriverWait(driver,30)
driver.get("https://www.whitepages.com/")
names = ['Kevin J Haggerty', 'Patricia B Halliday', 'David R Harb', 'Jeffrey E Hathway', 'Hanshin Hsieh']
state = "Manchester, NH"
for name in names:
scrape_individual_info_wp(driver, name, state)
driver.quit()
uj5u.com熱心網友回復:
如果腳本運行時任何輸入不為空,則其中一個腳本將重新打開頁面。
(頁面上的腳本太多;我無法確定是哪一個。)
一個簡單的解決方案是添加sleep(1)after driver.get(...)。
driver.get('https://www.whitepages.com/')
sleep(1) # Add this
用電量
sleep(1)顯著減慢腳本速度,尤其是在回圈多個names.
相反,我們可以交替使用兩個選項卡,并為下一次迭代準備每個選項卡。
回圈前設定:
driver.get('https://www.whitepages.com/')
driver.execute_script('window.open("https://www.whitepages.com/")')
driver.switch_to.window(driver.window_handles[0])
next_index = 1
在處理 each 之后準備下一個和下一個迭代name:
for name in names:
...
# Prepare this tab for next-next iteration
driver.get('https://www.whitepages.com/')
# Switch to another tab for next iteration
driver.switch_to.window(driver.window_handles[next_index])
next_index = 1 - next_index
driver.get(...)在scrape_individual_info_wp函式中注釋掉:
# driver.get('https://www.whitepages.com/')
uj5u.com熱心網友回復:
您可以為每個人創建一個新的驅動程式,因此在每次迭代中,您將從主頁開始并導航到您想要的頁面。
我在 Python 中使用 Selenium 做了這些事情,這是我在抓取多個頁面時常用的方法。
names = ['Kevin J Haggerty', 'Patricia B Halliday', 'David R Harb', 'Jeffrey E Hathway', 'Hanshin Hsieh']
for name in names:
print(name ':')
driver = webdriver.Chrome(service=Service("C:/expediaproject/Chromedriver/chromedriver.exe"))
wait = WebDriverWait(driver,30)
driver.get("https://www.whitepages.com/")
individual_info = scrape_individual_info_wp(driver, name, 'Manchester, NH')
for field in individual_info:
print('\t' field)
print('\n')
driver.quit()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/493583.html
