Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用selenium和python在webscraping期间无法识别唯一元素_Python_Selenium_Web Scraping - Fatal编程技术网

使用selenium和python在webscraping期间无法识别唯一元素

使用selenium和python在webscraping期间无法识别唯一元素,python,selenium,web-scraping,Python,Selenium,Web Scraping,我正试图使用Selenium和Python来清理[这个网站][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" bro

我正试图使用Selenium和Python来清理[这个网站][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
C:\Users\user\Desktop>test.py
回溯(最近一次呼叫最后一次):
文件“C:\Users\user\Desktop\test.py”,第13行,在
browser.find_element_by_xpath(“//a[contains(text(),'Annual Results')]”)。clic
k()
文件“C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\selenium\webdriver\remote\webelement.py”,第77行,单击
self.\u执行(命令。单击\u元素)
文件“C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\selenium\webdriver\remote\webelement.py”,第493行,在执行
返回self.\u parent.execute(命令,参数)
文件“C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\selenium\webdriver\remote\webdriver.py”,执行中的第256行
self.error\u handler.check\u响应(响应)
文件“C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site-
packages\selenium\webdriver\remote\errorhandler.py”,第194行,在check\u响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.ElementNotVisibleException:消息:元素不可见

以下是您问题的答案:

下面的代码块将打开URL
http://www.marketsmojo.com/Stocks?StockId=170831&Exchange=0#navDashboard
,鼠标悬停在
财务
,点击
年度结果
,最后点击
所有数据
,弹出
Axtel Industries所有年度结果
弹出窗口:

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()

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

将定位符从xpath for all_data更改为css“#NavFinancialAnnual#PrevDetails”,然后重试。

为什么Selenium应该单击xpath元素?您在代码中不使用任何单击。。。你能分享更多关于你想做什么的详细信息吗?@SolitaryReaper你提到的
//*[@id=PrevDetails]
xpath
无效。您正试图准确单击哪个元素?谢谢,我希望在点击该元素时弹出表格(参见图)。已更新click函数的代码。是否可以更改
浏览器。通过xpath('./*[@id=PrevDetails]')查找元素。
浏览器。通过xpath(“./*[@id='PrevDetails']”)查找元素。单击()
浏览器。通过id('PrevDetails')查找元素。单击()< /代码>让我知道,而不是<代码>表和<代码>元素< /代码>和代码>参考PIC < /代码>你能考虑更新你的手动步骤吗?感谢你的努力,但不幸的是,这并不能解决问题。我收到了相同的错误-->元素不可见您所说的相同错误
元素不可见是什么意思?关于哪个要素?在哪一条线上?请在问题区域更新您当前的代码和错误堆栈跟踪。谢谢,请检查我的最新答案,并让我知道状态。非常感谢你,朋友。我必须对代码做一些更改(关闭警报框),然后复制数据。但是,无论如何,这都是基于你的代码。再次感谢。!