在Python中使用Selenium和chromedriver进行Web抓取

在Python中使用Selenium和chromedriver进行Web抓取,python,selenium,web-scraping,selenium-chromedriver,Python,Selenium,Web Scraping,Selenium Chromedriver,我正在看第页。我正在尝试使用Selenium和chromdriver来获取此数据(由红色标记显示): 以下是我的Python代码: from selenium import webdriver from selenium.webdriver.chrome.options import Options from time import sleep chrome_options = Options() chrome_options.add_argument("--disable-infobars

我正在看第页。我正在尝试使用Selenium和chromdriver来获取此数据(由红色标记显示):

以下是我的Python代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep

chrome_options = Options()
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("disable-infobars")
driver = webdriver.Chrome(executable_path="/ABC/chromedriver", chrome_options=chrome_options)

driver.get("https://finance.yahoo.com/quote/IBM")
sleep(10)
estimated = driver.find_element_by_class_name("IbBox Ta(start) C($tertiaryColor)")
但是代码没有得到
Est。Return
长时间等待后,返回此错误消息:

selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified
我做错了什么?从页面获取
Est返回值的最佳和最快方法是什么

更新: 以下是我在Chrome中使用inspect元素时看到的情况:


您可以改用XPath吗,它应该是这样的:

estimated=driver.find_element_by_xpath(“*//div[@class='IbBox Ta(start)C($tertiaryColor)')”)。text()

告诉我进展如何!:D

头在获取所需值方面起着重要作用,因此请确保您有一个头。鉴于这是您获得所需内容的方式

import requests
from bs4 import BeautifulSoup

link = "https://finance.yahoo.com/quote/IBM"

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}

r = requests.get(link,headers=headers)
soup = BeautifulSoup(r.text,"lxml")
est_return = soup.select_one("[class='Mb\(8px\)']").get_text()
print(est_return)
此错误消息

selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified
…表示您使用的定位器策略不是有效的表达式


刮除文本-6%Est。Return您需要为位于()的元素的可见性引入WebDriverWait,您可以使用以下选项:

  • 使用
    XPATH

    driver.get('https://finance.yahoo.com/quote/IBM')
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='Near Fair Value']//following::div[1]/div"))).text)
    
  • 控制台输出:

    -6% Est. Return
    
  • 注意:您必须添加以下导入:

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

谢谢,它工作得很好。你觉得这门课怎么样?您如何知道它应该是
Mb\(8px\)
?包含大括号的类名应该转义。反斜杠(\)字符用于转义其他具有特殊含义的字符,例如换行符、反斜杠本身或引号字符。请详细说明,我对此不太熟悉。例如,如何提取接近公允价值的
?尝试此
汤。选择一个([class='Mb\(8px\)')).find_previous_sibling().get_text()