无法在 'Document' 上执行 'evaluate':字符串 '//button[@class="btn btn-primary"]' 不是在 Python 中使用 Selenium 的有效 XPath 表达式

Failed to execute 'evaluate' on 'Document': The string '//button[@class="btn btn-primary"]' is not a valid XPath expression using Selenium in Python

我尝试在 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>

这是导致错误的代码片段:

...
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. 在无头模式下使用 selenium Chrome。

也许你可以尝试使用

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

ps.I我是菜鸟,我以前从未使用过 xpath,所以

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

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

也将定位符括在引号中

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

    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 因为您错过了 value 的引号.


解决方案

实际上你的代码行将是:

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