【问题标题】:unable to identify unique element during webscraping using selenium and python在使用 selenium 和 python 进行网络抓取时无法识别唯一元素
【发布时间】:2017-06-27 04:38:26
【问题描述】:

我正在尝试使用 Selenium 和 Python 抓取 [this site][1]。以下是社区帮助下的更新代码:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
url="http://www.marketsmojo.com/Stocks?StockId=170831&Exchange=0#navFinancialsAnnual"
browser=webdriver.Chrome()
browser.maximize_window()
browser.get(url)
time.sleep(3)
financials = browser.find_element_by_xpath("//div[@id='myNavbar']//a[contains(text(),'Financials')]")
actions = ActionChains(browser)
actions.move_to_element(financials)
actions.perform()
browser.find_element_by_xpath("//a[contains(text(),'Annual Results')]").click()
all_data = browser.find_element_by_xpath("//a[@id='PrevDetails']")
browser.execute_script("window.scrollTo(0, 250);")
all_data.click()

该元素仍然不可见,从错误堆栈中可以看出:

C:\Users\user\Desktop>test.py
Traceback (most recent call last):
  File "C:\Users\user\Desktop\test.py", line 13, in <module>
    browser.find_element_by_xpath("//a[contains(text(),'Annual Results')]").clic
k()
  File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\selenium\webdriver\remote\webelement.py", line 77, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\selenium\webdriver\remote\webelement.py", line 493, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\selenium\webdriver\remote\webdriver.py", line 256, in execute
    self.error_handler.check_response(response)
  File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response    
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible

【问题讨论】:

  • 为什么Selenium 应该点击xpath 元素?您没有在代码中使用任何点击...您能否分享更多关于您想要做什么的详细信息?
  • @SolitaryReaper 您提到的xpath .//*[@id=PrevDetails] 无效。您要准确单击哪个元素?谢谢
  • 我希望抓取点击该元素时弹出的表格(参考图片)。已更新点击功能的代码。
  • 你能把browser.find_element_by_xpath('.//*[@id=PrevDetails]')改成browser.find_element_by_xpath(".//*[@id='PrevDetails']").click()browser.find_element_by_id('PrevDetails').click()告诉我
  • 而不是 the tablethat elementrefer pic 您可以考虑更新您的手动步骤吗?谢谢

标签: python selenium web-scraping


【解决方案1】:

这是您问题的答案:

以下代码块将打开 URL http://www.marketsmojo.com/Stocks?StockId=170831&amp;Exchange=0#navDashboard,鼠标悬停在 Financials,点击 Annual Results,最后点击 All Data,弹出 Axtel Industries All Annual Results 弹出窗口:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

browser=webdriver.Chrome(r"C:\\Utility\\BrowserDrivers\\chromedriver.exe")
browser.maximize_window()
browser.get('http://www.marketsmojo.com/Stocks?StockId=170831&Exchange=0#navFinancialsAnnual')
browser.implicitly_wait(20)
financials = browser.find_element_by_xpath("//div[@id='myNavbar']//a[contains(text(),'Financials')]")
actions = ActionChains(browser)
actions.move_to_element(financials)
actions.perform()
browser.find_element_by_xpath("//a[contains(text(),'Annual Results')]").click()
all_data = browser.find_element_by_xpath("//a[@id='PrevDetails']")
browser.execute_script("window.scrollTo(0, 250);")
all_data.click()

如果这能回答您的问题,请告诉我。

【讨论】:

  • 感谢您的努力,但不幸的是它并没有解决问题。我得到了同样的错误——>元素不可见
  • 同样的错误element not visible 是什么意思?在哪个元素上?在哪条线上?请在问题区域更新您当前的代码和错误堆栈跟踪。谢谢
  • 请检查我更新的答案,让我知道状态。谢谢
  • 非常感谢伙计。我必须对代码进行一些更改(关闭警告框),然后复制数据。但是,无论如何,这都是基于你的代码。再次感谢!
【解决方案2】:

将 all_data 的 xpath 定位器更改为 css "#navFinancialsAnnual #PrevDetails" 并尝试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多