我刚开始使用Python上的Selenium进行网页抓取,并且我在浏览网页时遇到了问题。我当前的代码通过使用
单击按钮来导航网页:web.find_element("xpath", '').click()
和相应的xpath在单圆括号中。
我正在尝试"点击"。一个HTML看起来像这样的按钮:
<a id="medicalUsageNext" href="#myPereferences" data-slide="next" class="btn btn-primary pull-right margin10-b gtm_medical_service_next" title="Next" role="button">
Next
<i class="icon-caret-right"></i>
</a>
尽管有各种方法尝试单击此按钮(添加隐式等待,通过css、文本或类型进行选择),但我仍然得到ElementNotInteractableException。
下面是我尝试点击按钮的方法之一:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
web = webdriver.Chrome()
web.implicitly_wait(10)
web.get('https://apply.coveredca.com/lw-shopandcompare/?lang=en_EN')
zip2 = "90210"
income2 = "100000"
year_1 = "2022"
household_1 = "1"
subsidy_household_size = "2"
web.find_element("xpath", '//*[@id="screeningquestions-zip"]').send_keys(zip2)
web.find_element("xpath", '//*[@id="screeningquestions-
householdincomeperyear"]').send_keys(income2)
year = web.find_element("xpath", '//*[@id="screeningquestions-enrollyear"]')
year.send_keys(year_1)
year.send_keys(Keys.RETURN)
hh = web.find_element("xpath", '//*[@id="screeningquestions-howmanypeopleinhousehold"]')
hh.send_keys(subsidy_household_size)
hh.send_keys(Keys.RETURN)
for x1 in range(0, int(household_1)):
temp1 = str(x1)
web.find_element("xpath", '//*[@id="screeningquestions-age-'+temp1+'"]').send_keys("33")
for x2 in range(int(household_1), int(subsidy_household_size)):
temp2 = str(x2)
web.find_element("xpath", '//*[@id="screeningquestions-age-'+temp2+'"]').send_keys("35")
temp3 = str(x2+1)
web.find_element("xpath", '//*[@id="app-container"]/main/div/div/div[2]/div/div/div/form/span[3]/div['+temp3+']/div[3]/div[1]/label/span[1]').click()
web.find_element("xpath", '//*[@id="account-creation-access-code-invalid-modal-button"]').click()
web.find_element("xpath", '/html/body/div[3]/div/div/div/div[2]/div/div[1]/button').click()
web.find_element("xpath", '//*[@id="shopandcompare-previewplans"]').click()
web.find_element("xpath", '//*[@id="providerSearchNext"]').click()
web.find_element("xpath", '//*[@id="medicalUsageNext"]').click
作为参考,这个点击通过以下网站:https://apply.coveredca.com/lw-shopandcompare/?lang=en_EN
我已经花了几天的时间来解决这个问题,非常感谢你的帮助。
点击text为下一个的元素你需要为element_to_be_clickable()诱导WebDriverWait,你可以使用以下定位策略:
使用PARTIAL_LINK_TEXT:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Next"))).click()
使用<<li>em> CSS_SELECTOR :
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a#medicalUsageNext[data-slide='next'][title='Next']"))).click()
使用<<li>em> XPATH :
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@id='medicalUsageNext' and @data-slide='next'][@title='Next']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC