【问题标题】:SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//div[@class= ‘encontrados ng-star-inserted’]' is not a valid XPath expressionSyntaxError:无法在“文档”上执行“评估”:字符串“//div [@class ='encontrados ng-star-inserted']'不是有效的XPath表达式
【发布时间】:2021-08-30 22:58:15
【问题描述】:

我收到语法错误。

我的代码:

driver.find_element_by_xpath('//div[@class= ‘encontrados ng-star-inserted’]')

我想提取本站搜索结果中包含的文字:

Website Link

【问题讨论】:

  • 您要提取什么文本?

标签: python selenium selenium-webdriver xpath scrapy


【解决方案1】:

您的定位器不正确。
试试这个:

results = driver.find_element_by_css('div.encontrados').text

或者这个

results = driver.find_element_by_xpath('//div[contains(@class,"encontrados")]').text

ng-star-inserted 不是固定的类名,而 div 标记名和 encontrados 类名给出了该元素的固定唯一标识。
此外,您的问题在于 '//div[@class= ‘encontrados ng-star-inserted’]' xpath 表达式。您正在尝试将' 用于外部和内部字符串定义,而您应该将' 用于其中一个,将" 用于另一个。 IE。或者这个:

`'//div[@class= "encontrados ng-star-inserted"]'`

或者这个

`"//div[@class= 'encontrados ng-star-inserted']"`

这就是您收到“不是有效的 XPath 表达”错误的原因,因为您的语法也不正确。
所以只需使用我在顶部使用的表达式之一:

results = driver.find_element_by_css('div.encontrados').text

或者这个

results = driver.find_element_by_xpath('//div[contains(@class,"encontrados")]').text

【讨论】:

  • 感谢您的帮助!但是当我尝试这些代码时,出现以下错误: NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"div.encontrados"}
  • 你有一些延迟/等待它之前?
  • 不,脚本在这部分崩溃了。
  • 那么,也许您应该在该行之前添加一些延迟以使页面加载?试着把最简单的延迟,比如time.sleep(10)放在results = driver.find_element_by_css('div.encontrados').text之前
【解决方案2】:

卢卡斯,

此答案假设您想从网站中获取文本:

print(driver.find_element(By.XPATH, "//html/body").get_attribute('innerHTML'))

我在您共享的网络应用中找不到encontrados ng-star-inserted 类。

但如果你想检索网站中间的文本,你可以这样做:

for middle_text in driver.find_elements(By.CSS_SELECTOR, "li.resultado-item"):
    print(middle_text.text)

【讨论】:

    【解决方案3】:
    driver.find_element_by_xpath('//div[@class= ‘encontrados ng-star-inserted’]')
    

    你有无效字符'包围属性值使用任何:

    driver.find_element_by_xpath('//div[@class= "encontrados ng-star-inserted"]')   
    driver.find_element_by_xpath("//div[@class= 'encontrados ng-star-inserted']")
    driver.find_element_by_xpath("//div[@class= \"encontrados ng-star-inserted\"]")
    driver.find_element_by_xpath('//div[@class= \'encontrados ng-star-inserted\']')
    

    【讨论】:

    • 还不能工作,即使有这些变化。
    猜你喜欢
    • 2021-02-19
    • 2019-12-25
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 2018-10-07
    相关资源
    最近更新 更多