无法在 '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 的引号xpath.
解决方案
实际上你的代码行将是:
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()
我尝试在 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 的引号xpath.
解决方案
实际上你的代码行将是:
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()