【问题标题】:Web scraping with Selenium - clicking on link with javascript (can't find element)使用 Selenium 进行 Web 抓取 - 单击使用 javascript 的链接(找不到元素)
【发布时间】:2018-06-16 21:36:36
【问题描述】:

我已经让 selenium 完美工作,但我想知道如何点击我输入的字符串的链接:

from selenium import webdriver  
from selenium.common.exceptions import NoSuchElementException  
from selenium.webdriver.common.keys import Keys  

url = "http://www.howlongtobeat.com"
driver = webdriver.Chrome()
driver.get(url)

search_element = driver.find_element_by_name("global_search_box")
search_element.clear()
search_element.send_keys("God of War (2018)")
search_element.send_keys(Keys.RETURN)

link = driver.find_element_by_xpath("//div id=[@class='nav_playthroughs_load]")
link.click()

如何让它点击标题为“战神(2018)”的链接

我收到此错误:

WebDriverException                        Traceback (most recent call last)
<ipython-input-7-0343b11486bd> in <module>()
----> 1 search_element = driver.find_element_by_name("global_search_box")
      2 search_element.clear()
      3 search_element.send_keys("God of War (2018)")
      4 search_element.send_keys(Keys.RETURN)
      5 

~/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in find_element_by_name(self, name)
    485             element = driver.find_element_by_name('foo')
    486         """
--> 487         return self.find_element(by=By.NAME, value=name)
    488 
    489     def find_elements_by_name(self, name):

~/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in find_element(self, by, value)
    953         return self.execute(Command.FIND_ELEMENT, {
    954             'using': by,
--> 955             'value': value})['value']
    956 
    957     def find_elements(self, by=By.ID, value=None):

~/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params)
    310         response = self.command_executor.execute(driver_command, params)
    311         if response:
--> 312             self.error_handler.check_response(response)
    313             response['value'] = self._unwrap_value(
    314                 response.get('value', None))

~/anaconda3/lib/python3.6/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):

WebDriverException: Message: chrome not reachable
  (Session info: chrome=67.0.3396.79)
  (Driver info: chromedriver=2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881),platform=Linux 4.15.0-23-generic x86_64)

谢谢,

【问题讨论】:

标签: python-3.x selenium web-scraping


【解决方案1】:

要点击文本为 God of War (2018) 的链接,您必须诱导 WebDriverWait 以使 元素可点击 和您可以使用以下任一解决方案:

  • 链接文本

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "God of War (2018)"))).click()
    
  • CSS 选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.text_blue[title^='God of War']"))).click()
    
  • XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='text_blue'][@title=\"God of War (2018)\"]"))).click()
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-20
    • 2019-08-15
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多