【问题标题】:Failed to execute 'evaluate' on 'Document': The string '//button[@class="btn btn-primary"]' is not a valid XPath expression using Selenium in Python无法对“文档”执行“评估”:字符串“//button[@class="btn btn-primary"]”不是在 Python 中使用 Selenium 的有效 XPath 表达式
【发布时间】:2021-02-02 14:32:44
【问题描述】:

我尝试用 Python 编写一个脚本,该脚本允许我将商品放入在线商店的购物车中。 我不是编程专家,所以请善待我:)。

这是 HTML:

<button
  class="btn btn-primary btn-block js-add-to-cart js-enable-btn"
  data-attr-name="Product Detail Page - Level 1"
  data-attr-value="Add to Shopping Cart"
  data-attr-proddata='{
    "productName":"WLAN-Lautsprecher-Set MR 50",
    "productID":"1010950",
    "brand":"Blaupunkt",
    "ownedBrand":"",
    "priceWithTax":179.0,
    "quantity":1}'
  type="submit"
  disabled="disabled"
>
  <i class="icon-hd icon-ic-caddy-o"></i>
  <span class="hidden-xs">In den Warenkorb</span>
</button>

这是导致错误的代码的 sn-p:

...
driver.get(url)
time.sleep(15)
driver.find_element_by_xpath(//button[@class="btn btn-primary btn-block js-add-to-cart js-enable-btn"][@type, "submit"]).click()
...

错误是:

SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//button[@class="btn btn-primary btn-block js-add-to-cart js-enable-btn"][@type, "submit"]' is not a valid XPath expression.
  (Session info: headless chrome=86.0.4240.197)

如果我删除“'”,则会出现语法错误:

 File "/home/pi/login.py", line 29
    driver.find_element_by_xpath(//button[@class="btn btn-primary btn-block js-add-to-cart js-enable-btn"][@type, "submit"]).click()
                                  ^
SyntaxError: invalid syntax

这只是一个爱好项目,但我不知道我做错了什么。

P.S.:我在 Raspberry Pi 4 上运行代码。硒和 Chrome 处于无头模式。

【问题讨论】:

    标签: python selenium selenium-webdriver xpath syntax-error


    【解决方案1】:

    你已经足够接近了。正如错误指出的那样:

        driver.find_element_by_xpath(//button[@class="btn btn-primary btn-block js-add-to-cart js-enable-btn"][@type, "submit"]).click()
                      ^
    SyntaxError: invalid syntax
    

    python 解释器抱怨 invalid syntax 因为您错过了 的引号。


    解决方案

    实际上,您的代码行将是:

     driver.find_element_by_xpath('//button[@class="btn btn-primary btn-block js-add-to-cart js-enable-btn" and @type="submit"]').click()
     
    

    替代方案:

    driver.find_element_by_xpath("//button[@class='btn btn-primary btn-block js-add-to-cart js-enable-btn' and @type='submit']").click()
    

    考虑到 find_element_by_* 命令已被弃用并改用 find_element()

    driver.find_element(By.XPATH, "//button[@class='btn btn-primary btn-block js-add-to-cart js-enable-btn' and @type='submit']").click()
    

    【讨论】:

      【解决方案2】:

      也许你可以尝试使用

      driver.find_element_by_class_name("js-add-to-cart").click()
      

      ps.我是个菜鸟,之前从来没有用过 xpath

      【讨论】:

        【解决方案3】:

        这是有效的 xpath 使用 'and' 向表达式添加多个属性

        driver.find_element_by_xpath('//button[@class="btn btn-primary btn-block js-add-to-cart js-enable-btn" and @type="submit"]')
        

        也将定位符括在引号中

        【讨论】:

          猜你喜欢
          • 2019-12-25
          • 2021-02-19
          • 2021-08-30
          • 2019-02-03
          • 1970-01-01
          • 1970-01-01
          • 2022-12-04
          • 1970-01-01
          • 2015-05-08
          相关资源
          最近更新 更多