拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何在WebDriverWait中使用长CSS_SELECTOR?

如何在WebDriverWait中使用长CSS_SELECTOR?

白鹭 - 2022-02-11 2274 0 0

背景关系: 链接

—————————————————————

我想按下右上角的那个小按钮。我已经从小包里复制了选择器。现在我希望它在我的脚本中按下它。

选择器代码如下所示:

#z-navicat-header-root > header > div:nth-child(3) > div > div > div > div.mrHm0Z.C3wGFf > div > div > div > div.z-navicat-header_topRow > div.z-navicat-header_langNavTools > div > div.z-navicat-header_navToolItem.z-navicat-header_navToolItem-bag > a > div > svg

我尝试过的:

WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.z-navicat#z-navicat-header-root > header > div:nth-child(3) > div > div > div > div.mrHm0Z.C3wGFf > div > div > div > div.z-navicat-header_topRow > div.z-navicat-header_langNavTools > div > div.z-navicat-header_navToolItem.z-navicat-header_navToolItem-bag > a > div > svg"))).click()

代码:

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select

browser = webdriver.Chrome('C:/Users/rober/OneDrive/Skrivebord/bot/chromedriver')

# Graffik kort
browser.get("https://www.zalando.dk/jordan-air-jordan-1-mid-sneakers-high-joc12n001-a18.html")

buyButton = False

while buyButton is False:

    try:
        
        addToCartBtn = addButton = browser.find_element_by_xpath('/html/body/div[4]/div/div[2]/div/div/div[2]/div[1]/x-wrapper-re-1-6/div/div[4]/button')

        print("Varen er udsolgt")

        time.sleep(1)
        browser.refresh()

    except:
        addToCartBtn = addButton = browser.find_element_by_xpath('//*[@id="picker-trigger"]')

        print("Varen er p? Lager")
        buyButton = True

while buyButton is True:
    time.sleep(3)
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.uc-btn#uc-btn-accept-banner"))).click()
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='V?lg st?rrelse']"))).click()
    browser.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//label[starts-with(@for, 'size-picker')]//span[text()='51.5']"))))
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[starts-with(@for, 'size-picker')]//span[text()='51.5']"))).click()
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='L?g i indk?bskurv']"))).click()
    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.z-navicat#z-navicat-header-root > header > div:nth-child(3) > div > div > div > div.mrHm0Z.C3wGFf > div > div > div > div.z-navicat-header_topRow > div.z-navicat-header_langNavTools > div > div.z-navicat-header_navToolItem.z-navicat-header_navToolItem-bag > a > div > svg"))).click()

现在它不起作用,但是如果有关于 selenium 和 chromedriver 的聪明人,那么非常欢迎您就我如何解决这个问题发表评论

网站:链接

uj5u.com热心网友回复:

无需使用绝对路径,只需呼叫元素,就像通过其 title 属性处理“accept-banner”一样:

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a[title="Indk?bskurv"]'))).click()

或其 href 属性:

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a[href="/cart/"]'))).click()

或通过其父类名称:

WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.z-navicat-header_navToolItem-bag a'))).click()
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *