Javascript 无法使用Selenium刮取web数据

Javascript 无法使用Selenium刮取web数据,javascript,python,selenium,web-scraping,Javascript,Python,Selenium,Web Scraping,我正在尝试从上的首页表获取数据。但有些东西就是没有点击 from selenium import webdriver browser = webdriver.Chrome(executable_path=r'C:\Scrapers\chromedriver.exe') browser.get("https://icostats.com") browser.find_element_by_xpath("""//*[@id="app"]/div/div[2]/div[2]/div[2]/div[2

我正在尝试从上的首页表获取数据。但有些东西就是没有点击

from selenium import webdriver

browser = webdriver.Chrome(executable_path=r'C:\Scrapers\chromedriver.exe')
browser.get("https://icostats.com")
browser.find_element_by_xpath("""//*[@id="app"]/div/div[2]/div[2]/div[2]/div[2]/div[8]/span/span""").s()
posts = browser.find_element_by_class_name("tdPrimary-0-75")
for post in posts:
    print(post.text)
我得到的错误是:

*

C:\Python36\python.exe C:/…/PycharmProjects/PyQtPS/ICO_spyder.py 回溯(最近一次调用上次):文件 “C:/…/PycharmProjects/PyQtPS/ICO_spyder.py”,第5行 浏览器。通过xpath(“”/[@id=“app”]/div/div[2]/div[2]/div[2]/div[1]/div[2]“”)查找元素。单击() 文件 “C:\Python36\lib\site packages\selenium\webdriver\remote\webdriver.py”, 第313行,按xpath查找元素 返回self.find_元素(by=by.XPATH,value=XPATH)文件“C:\Python36\lib\site packages\selenium\webdriver\remote\webdriver.py”, 第791行,在find_元素中 'value':value})['value']文件“C:\Python36\lib\site packages\selenium\webdriver\remote\webdriver.py”, 第256行,执行中 self.error\u handler.check\u响应(response)文件“C:\Python36\lib\site packages\selenium\webdriver\remote\errorhandler.py”, 第194行,在check_响应中 引发异常类(消息、屏幕、堆栈跟踪)selenium.common.exceptions.NoSuchElementException:消息:无此类 元素:无法定位元素: {“方法”:“xpath”,“选择器”:”//[@id=“app”]/div/div[2]/div[2]/div[2]/div[1]/div[2]} (会话信息:chrome=59.0.3071.115)(驾驶员信息: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),平台=Windows NT 6.1.7600 x86_64)

*

编辑

终于让它工作了:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

browser = webdriver.Chrome(executable_path=r'C:\Scrapers\chromedriver.exe')
browser.get("https://icostats.com")
wait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "#app > div > div.container-0-16 > div.table-0-20 > div.tbody-0-21 > div:nth-child(2) > div:nth-child(8)")))

posts = browser.find_elements_by_class_name("thName-0-55")
for post in posts:
    print(post.text)

posts = browser.find_elements_by_class_name("tdName-0-73")
for post in posts:
    print(post.text)
是否有任何方法可以迭代每个标题/列并将其导出到csv文件,而不必像这样遍历每个类

  • 这行中似乎没有
    s()方法
  • 浏览器。通过xpath(“”/*[@id=“app”]/div/div[2]/div[2]/div[2]/div[2]/div[2]/div[8]/span/span”“)查找元素

    所以,你需要的可能是

    browser.find_element_by_xpath("""//*[@id="app"]/div/div[2]/div[2]/div[2]/div[2]/div[8]/span/span""").text
    
  • 由于您希望对结果进行迭代,因此此行:

    posts=browser。通过类名称(“tdPrimary-0-75”)查找元素

  • 应该是

    posts = browser.find_elements_by_class_name("tdPrimary-0-75")
    
  • 这行中似乎没有
    s()方法
  • 浏览器。通过xpath(“”/*[@id=“app”]/div/div[2]/div[2]/div[2]/div[2]/div[2]/div[8]/span/span”“)查找元素

    所以,你需要的可能是

    browser.find_element_by_xpath("""//*[@id="app"]/div/div[2]/div[2]/div[2]/div[2]/div[8]/span/span""").text
    
  • 由于您希望对结果进行迭代,因此此行:

    posts=browser。通过类名称(“tdPrimary-0-75”)查找元素

  • 应该是

    posts = browser.find_elements_by_class_name("tdPrimary-0-75")
    

    JavaScript
    动态生成的所需数据。您需要等待它出现在页面上:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import WebDriverWait as wait
    
    browser = webdriver.Chrome(executable_path=r'C:\Scrapers\chromedriver.exe')
    browser.get("https://icostats.com")
    wait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div#app>div")))
    posts = browser.find_element_by_class_name("tdPrimary-0-75")
    for post in posts:
        print(post.text)
    

    JavaScript
    动态生成的所需数据。您需要等待它出现在页面上:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import WebDriverWait as wait
    
    browser = webdriver.Chrome(executable_path=r'C:\Scrapers\chromedriver.exe')
    browser.get("https://icostats.com")
    wait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div#app>div")))
    posts = browser.find_element_by_class_name("tdPrimary-0-75")
    for post in posts:
        print(post.text)
    

    从该网站上我可以看到,有id应用程序的div中没有其他div?那你是怎么尝试的?你在尝试什么?很明显,这与
    xpath
    有关,你确定网站的HTML结构包含这些元素吗?是的,我也从Chrome中复制了xpath。从网站上我可以看到,id为的div应用程序中没有其他div?那你是怎么尝试的?你在尝试什么?很明显,这与
    xpath
    有关,你确定网站的HTML结构包含这些元素吗?是的,我也从Chrome中复制了xpath。这非常有效!有没有一种方法可以将每一个COLUN和fech头和数据运行到一个CSV文件中?你可以检查一下,这很好!有没有一种方法可以将每个coln和fech头和数据运行到一个CSV文件中?您可以检查