首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果项目是“库存”,我如何告诉selenium添加到篮子中?

如果项目是“库存”,我如何告诉selenium添加到篮子中?
EN

Stack Overflow用户
提问于 2022-04-28 13:13:44
回答 2查看 108关注 0票数 1

如果项目是库存的,我有以下代码打印“库存”:

代码语言:javascript
复制
from selenium import webdriver

from selenium.webdriver.chrome.options import Options

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC


options=Options()
driver=webdriver.Chrome(options=options)
    
#Directing to site
driver.get("https://www.amazon.co.uk/Nintendo-Switch-OLED-Model-Neon/dp/B098TNW7NM/ref=sr_1_3?keywords=Nintendo+Switch&qid=1651147043&sr=8-3");
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/span/form/div[3]/span[1]/span/input"))).click()



condition= print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@id='availability']//span[contains(text(),'In stock.')]"))).get_attribute("innerHTML"))
if condition == 'In stock.':
    
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div[6]/div[4]/div[1]/div[2]/div/div/div/div/div/div/form/div/div/div/div/div[3]/div/div[14]/div[1]/span/span/span/input"))).click()

else:
    pass

我如何告诉selenium‘添加到篮子’,如果项目是‘在库存’?

我想:

转到这个url:https://www.amazon.co.uk/Nintendo-Switch-OLED-Model-Neon/dp/B098TNW7NM/ref=sr_1_3?keywords=Nintendo+Switch&qid=1651147043&sr=8-3

  1. 检查右侧的文本是否显示“库存”..

  1. 如果有存货,我想把它加到篮子里。

我通过检查->copy->copy路径获得xpath。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-28 14:23:04

理想情况下,您应该使用相对XPath。

我们使用的是presence_of_all_elements_located,如果没有找到,它将返回一个list of web elements,如果没有,它将是an empty list,因此in_stock是一个web元素列表。现在,len()是一种方法,它将为我们提供列表中有多少web元素的输出。因此,逻辑是这样的,如果列表有任何内容,那么它必须是In stock -> Now add to basket,否则它必须是<00 --在这种情况下,"In stock"不会出现,我们也不会在篮子中添加任何东西。

下面的代码转到URL,查找"In stock" text,如果它存在,那么"Add to basket" (如果不是简单的tear down bot )。

代码:

代码语言:javascript
复制
driver.maximize_window()
wait = WebDriverWait(driver, 30)

driver.get("https://www.amazon.co.uk/Nintendo-Switch-OLED-Model-Neon/dp/B098TNW7NM/ref=sr_1_3?keywords=Nintendo+Switch&qid=1651147043&sr=8-3")
try:
    wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/span/form/div[3]/span[1]/span/input"))).click()
    print("clicked on accept cookies successfully")
except:
    pass

in_stock = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//div[@id='availability']//span[contains(text(),' In stock. ')]")))
try:
    if len(in_stock) > 0:
        print("In stock must be present.")
        wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#add-to-cart-button"))).click()
        print("Clicked on add to cart button")
    else:
        print("In stock must be not present")
except:
    print("Something went wrong")
    pass

导入:

代码语言:javascript
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
票数 0
EN

Stack Overflow用户

发布于 2022-04-28 13:48:23

假设代码的最后一行返回“库存”

代码语言:javascript
复制
condition=WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@id='availability']//span[contains(text(),'In stock.')]"))).get_attribute("innerHTML")

if condition == 'in stock':
    # logic to add to cart
else:
    pass

关于添加项/与按钮交互的逻辑,请查看以下内容:https://pythonspot.com/selenium-click-button/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72044340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档