如果项目是库存的,我有以下代码打印“库存”:
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‘添加到篮子’,如果项目是‘在库存’?
我想:
我通过检查->copy->copy路径获得xpath。
发布于 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,否则它必须是<0或0 --在这种情况下,"In stock"不会出现,我们也不会在篮子中添加任何东西。
下面的代码转到URL,查找"In stock" text,如果它存在,那么"Add to basket" (如果不是简单的tear down bot )。
代码:
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导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC发布于 2022-04-28 13:48:23
假设代码的最后一行返回“库存”
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/
https://stackoverflow.com/questions/72044340
复制相似问题