[英]Cannot Click the button by using selenium
我嘗試通過滾動到元素來單擊隱藏按鈕,但仍然無法正常工作。 僅當我手動滾動它時,編碼才起作用。 我可以知道原因嗎? 謝謝! 網址: https : //www1.hkexnews.hk/search/titlesearch.xhtml?lang=zh-CN
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
driver = webdriver.Chrome("C:/Users/Ivan.Chak/Desktop/cbbc/chromedriver", chrome_options=options)
driver.implicitly_wait(30)
driver.get("https://www1.hkexnews.hk/search/titlesearch.xhtml?lang=en")
driver.find_element_by_css_selector("#tier1-select .combobox-input-wrap").click()
driver.find_element_by_css_selector(".searchType .droplist-item:nth-child(2) > a").click()
driver.find_element_by_css_selector("#rbAfter2006 .combobox-field").click()
element = driver.find_element_by_xpath("//a[contains(text(),'Debt and Structured Products')]")
actions = ActionChains(driver)
actions.move_to_element(element).perform()
time.sleep(1)
element.click() <--- This is not working!!!
---------------------------------------------------------------------------
ElementNotInteractableException Traceback (most recent call last)
<ipython-input-323-cf25f85114ab> in <module>()
----> 1 element.click()
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in click(self)
78 def click(self):
79 """Clicks the element."""
---> 80 self._execute(Command.CLICK_ELEMENT)
81
82 def submit(self):
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
631 params = {}
632 params['id'] = self._id
--> 633 return self._parent.execute(command, params)
634
635 def find_element(self, by=By.ID, value=None):
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
ElementNotInteractableException: Message: element not interactable
(Session info: chrome=75.0.3770.142)
您可能會滾動到element(button)。 如果您的網頁具有任何功能區,那么這又將被隱藏。 嘗試滾動到其上方的任何其他元素。 這解決了我的問題。
單擊之前,必須滾動到每個菜單項,因為可以使用JavaScript arguments[0].scrollIntoView(true);
您可以使用常規方法進行滾動,然后再單擊下面的代碼,例如:
def click(element):
driver.execute_script("arguments[0].scrollIntoView(true);", element)
element.click()
driver = webdriver.Chrome()
driver.get("https://www1.hkexnews.hk/search/titlesearch.xhtml?lang=en")
driver.find_element_by_css_selector(".searchType").click()
driver.find_element_by_xpath("//div[@class='droplist-item' and ./a[.='Headline Category']]").click()
driver.find_element_by_id("rbAfter2006").click()
click(driver.find_element_by_xpath("//a[.='Debt and Structured Products']"))
click(driver.find_element_by_xpath("//a[.='Debt Securities']"))
click(driver.find_element_by_xpath("//a[.='Issuer-Specific Report - Debt Securities']"))
或者,您可以使用如下所示的菜單選擇特定方法:
def select_menu(menu_text):
element = driver.find_element_by_xpath(f"//a[.='{menu_text}']")
driver.execute_script("arguments[0].scrollIntoView(true);", element)
element.click()
driver = webdriver.Chrome()
driver.get("https://www1.hkexnews.hk/search/titlesearch.xhtml?lang=en")
driver.find_element_by_css_selector(".searchType").click()
driver.find_element_by_xpath("//div[@class='droplist-item' and ./a[.='Headline Category']]").click()
driver.find_element_by_id("rbAfter2006").click()
select_menu("Debt and Structured Products")
select_menu("Debt Securities")
select_menu("Issuer-Specific Report - Debt Securities")
選擇搜索條件的更通用的方法:
def select_search_criteria(criteria, *menus):
driver.find_element_by_css_selector(".searchType").click()
criteria_element = driver.find_element_by_xpath(f"//div[@class='droplist-item' and ./a[.='{criteria}']]")
data_value = criteria_element.get_attribute("data-value")
criteria_element.click()
document_type_element = driver.find_element_by_id(data_value)
if document_type_element.find_element_by_css_selector("a.combobox-field").get_attribute("aria-expanded") == "false":
document_type_element.click()
for menu in menus:
element = document_type_element.find_element_by_xpath(f".//a[.='{menu}']")
driver.execute_script("arguments[0].scrollIntoView(true);", element)
element.click()
driver = webdriver.Chrome()
driver.get("https://www1.hkexnews.hk/search/titlesearch.xhtml?lang=en")
select_search_type("Headline Category", "Debt and Structured Products", "Debt Securities")
select_search_type("Document Type", "Circulars")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.