Python Selenium явное ожидание и отправка ключей с помощью xpath
Я работаю над ускорением очистки веб-страниц Selenium путем замены implicitly_wait
к WebDriverWait
с send_keys
а также click
. Я немного не понимаю, как этого добиться.
Это мой код для inplicitly_wait
:
def ncd_web_scraping(df):
df['new_column'] = 'Not_sure'
url = 'url'
for i in df.index:
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get(url)
name = driver.find_element_by_xpath('//*[@id="person"]')
name.send_keys(df.loc[i, 'Name'])
state = driver.find_element_by_xpath('//*[@id="state"]')
state.send_keys(df.loc[i, 'State'])
botton = driver.find_element_by_xpath('/html/body/div[2]/form/button')
botton.click()
soup = BeautifulSoup(driver.page_source, 'html.parser')
if soup.find('h5'):
df.loc[i, 'new_column'] = 'Yes'
else:
df.loc[i, 'new_column'] = 'No'
return df
Может ли кто-нибудь помочь мне с тем, как webDriveWait
код переписать?
Я ценю вашу помощь.
1 ответ
Заменив implicitwait на WebDriverWait, ваш эффективный блок кода будет:
def ncd_web_scraping(df):
df['new_column'] = 'Not_sure'
url = 'url'
for i in df.index:
driver = webdriver.Chrome()
driver.get(url)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='person']"))).send_keys(df.loc[i, 'Name'])
driver.find_element_by_xpath('//*[@id="state"]').send_keys(df.loc[i, 'State'])
driver.find_element_by_xpath('/html/body/div[2]/form/button').click()
soup = BeautifulSoup(driver.page_source, 'html.parser')
if soup.find('h5'):
df.loc[i, 'new_column'] = 'Yes'
else:
df.loc[i, 'new_column'] = 'No'
return df
Примечание. Вам необходимо добавить следующий импорт:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC