【问题标题】:Can you help me use Selenium to click Add To Cart button?你能帮我用 Selenium 点击 Add To Cart 按钮吗?
【发布时间】:2021-01-18 04:43:33
【问题描述】:

我正在尝试编写教程并在 python 中学习 Selenium,但是我似乎无法让 Selenium 使用 find_element_by_class 或 find_element_by_XPATH 来单击“添加到购物车”按钮。问题是检查该项目是否缺货,如果缺货则刷新网页并重新启动脚本。如果该商品有货,则应点击“添加到购物车”

我正在使用:

Python v3.9

Chrome v87

这是我练习的网址:

https://www.currys.co.uk/gbuk/tv-and-home-entertainment/televisions/televisions/samsung-ue75tu7020kxxu-75-smart-4k-ultra-hd-hdr-led-tv-10213562-pdt.html

这是我当前的点击代码:

# Selenium Tutorial #1

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains

import time

driver = webdriver.Chrome(r"C:\Users\Ste1337\Desktop\chromedriver\chromedriver.exe")

driver.get("https://www.currys.co.uk/gbuk/tv-and-home-entertainment/televisions/televisions/samsung-ue75tu7020kxxu-75-smart-4k-ultra-hd-hdr-led-tv-10213562-pdt.html")

#search = driver.find_element_by_id(ContentPlaceHolder1_NotifyBtn)

link = driver.find_element_by_id("onetrust-accept-btn-handler")
link.click

try:
    element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "onetrust-accept-btn-handler"))
    )
    element.click()
except Exception:
    pass

driver.implicitly_wait(2)

try:
    element = WebDriverWait(driver, 1).until(
    EC.presence_of_element_located((By.XPATH, "email-desktop"))
    )
    time.sleep(1)
    browser.refresh()
except:
    driver.find_element_by_class_name("Button__StyledButton-bvTPUF hZIOeU Button-jyKNMA GZkwS")
    link.click()

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver selenium-chromedriver


    【解决方案1】:

    您不能将多个类传递给find_element_by_class_name。请改用driver.find_element_by_css_selectorxpath

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.action_chains import ActionChains
    
    import time
    
    driver = webdriver.Chrome(r"C:\Users\Frank\Documents\Python Scripts\chromedriver_win32\chromedriver.exe")
    
    driver.get("https://www.currys.co.uk/gbuk/tv-and-home-entertainment/televisions/televisions/samsung-ue75tu7020kxxu-75-smart-4k-ultra-hd-hdr-led-tv-10213562-pdt.html")
    
    #search = driver.find_element_by_id(ContentPlaceHolder1_NotifyBtn)
    
    try:
        element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "onetrust-accept-btn-handler"))
        )
        element.click()
    except Exception:
        pass
    
    driver.implicitly_wait(2)
    
    try:
        element = WebDriverWait(driver, 1).until(
        EC.presence_of_element_located((By.XPATH, "email-desktop"))
        )
        time.sleep(5)
        driver.refresh()
    except:
        button = driver.find_element_by_css_selector("button.Button__StyledButton-bvTPUF.hZIOeU.Button-jyKNMA.GZkwS")
    

    接下来,如果您调用button.is_displayed(),它将返回False,因为它是一个隐藏元素。这意味着您无法使用button.click() 与之交互。相反,您可以使用 javascript 来单击按钮。

    driver.execute_script("arguments[0].click();", button)
    

    【讨论】:

    • 谢谢!那工作得很好。尽管使用“转到结帐”按钮,但在下一页上复制它时遇到了一些麻烦。我正在使用此代码 ``` button = driver.find_element_by_xpath("Go to Checkout") driver.execute_script("arguments[0].click();", button) ``
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多