Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用xpath“;及条件查询是否正确?_Python_Selenium_Xpath_Amazon - Fatal编程技术网

Python 如何使用xpath“;及条件查询是否正确?

Python 如何使用xpath“;及条件查询是否正确?,python,selenium,xpath,amazon,Python,Selenium,Xpath,Amazon,我试图在amazon.fr上的prime选项上设置一个复选标记 这是链接(主选项在左边): 下面是一张显示我要选中的字段的图像: 我几乎让它工作了。但它并不适用于所有亚马逊类别,这就是为什么我添加了“and”-操作符。下面是我的xpath查询: driver = webdriver.Chrome() driver.get(category_url) driver.find_element_by_xpath('//*[@id="leftNav"]/h4[text()="%s"]/following

我试图在amazon.fr上的prime选项上设置一个复选标记

这是链接(主选项在左边):

下面是一张显示我要选中的字段的图像:

我几乎让它工作了。但它并不适用于所有亚马逊类别,这就是为什么我添加了“and”-操作符。下面是我的xpath查询:

driver = webdriver.Chrome()
driver.get(category_url)
driver.find_element_by_xpath('//*[@id="leftNav"]/h4[text()="%s"]/following-sibling::ul//input[contains(@name, "s-ref-checkbox-")] and //*[@id="leftNav"]/h4[text()="%s"]/following-sibling::ul//input[contains(@name, "s-ref-checkbox-")]//i[contains(@class, "icon-prime")]' % ("Option d'expédition", "Option d'expédition"))
driver.click()
如何正确设置查询的格式?甚至需要和操作员吗?我收到以下错误消息:

TypeError:未能对“文档”执行“评估”:结果为 不是节点集,因此无法转换为所需类型


我认为您正在尝试在不通过WebElement的情况下单击。 您可以根据其旁边的主标签位置找到该复选框

请尝试以下xpath

myprime = driver.find_element_by_xpath("//*[contains(@class,'icon-prime a-icon-small s-ref-text-link')]/parent::span/parent::label/input")
myprime.click();

我刚刚尝试了下面的XPath,它唯一地定位了元素

//label[.//i[contains(@class, 'a-icon-prime')]]/input
^ find a LABEL tag
       ^ that has a child I tag
            ^ that contains the class 'a-icon-prime' (indicating the prime logo)
                                               ^ then find an INPUT under the LABEL
最低限度的工作是:

//i[contains(@class,'small') and contains(@class,'prime')]
为了更好的健壮性和可靠性,我建议将其包装成类似的:


更多信息:

请阅读原因。粘贴代码并正确设置格式。图像不是代码,但显示了网站中要刮取的部分。我看到。。。但是也应该以文本的形式包含在问题中,并且格式正确。非常感谢。现在它工作了!我已经试了几个小时想把它做好。
prime = WebDriverWait(driver, 10).until(
    expected_conditions.presence_of_element_located((By.XPATH, "//i[contains(@class,'small') and contains(@class,'prime')]")))
prime.click()