Selenium Python混淆了不存在的元素

dl5txlt9  于 2023-01-26  发布在  Python
关注(0)|答案(1)|浏览(123)

我在超市里
https://www.sklavenitis.gr/eidi-artozacharoplasteioy/psomi-typopoiimeno/)我有一个文件的网址,读取它们并迭代它们,但是 selenium 对一些不存在的元素感到困惑,例如:
在第二个链接,这是销售的价格是正确的,但后来像第三或第四个链接,这是不是在折扣,它仍然打印的价值,第二个链接,并再次当一些东西是在折扣一切都是好的,但如果是不是在折扣获得以前的折扣值。我应该关闭我的驱动程序在每个迭代,并重新打开它?我看到一些帖子,他们没有这样做,我问

options = webdriver.ChromeOptions()
delay = 10
options.add_argument(f'user-agent={user_agent}')
options.add_argument("start-maximized")
options.add_argument('--no-sandbox')
options.add_argument('--disable-infobars')
options.add_argument("--headless")
options.add_argument('--disable-dev-shm-usage')
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
s = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=s, options=options)
for link in links:
    driver.get(link)
    myElem =WebDriverWait(theDriver,
    delay).until(EC.presence_of_element_located((By.XPATH, "//h1[@class='product- 
    detail__title']")))
    driver.find_element(by=By.XPATH, value="//div[@class='product-detail__left']").find_element(by=By.XPATH, value="//div[@class='deleted__price']").text.replace(",", ".")

Edit#1很抱歉的混乱,我想刮的价格之前的折扣和之后的折扣.(如果没有折扣,它只是打印当前的价格).我的问题是在项目上没有折扣, selenium 显示,不知何故有一个折扣,因为这个原因,我添加了类产品的细节留下更严格的刮,但它没有工作.

8qgya5xd

8qgya5xd1#

要在一行代码中使用Seleniumpython提取每个项目的价格,将WebDriverWait归纳为visibility_of_all_elements_located(),可以使用以下Locator Strategies之一:

  • 使用 *CSS选择器 * 和get_attribute("textContent")
driver.get('https://www.sklavenitis.gr/eidi-artozacharoplasteioy/psomi-typopoiimeno/')
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.nvcookies__right button.nvcookies__button.nvcookies__button--primary.consent-give"))).click()
print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.price")))])
  • 使用 XPATHtext 属性:
driver.get('https://www.sklavenitis.gr/eidi-artozacharoplasteioy/psomi-typopoiimeno/')
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.nvcookies__right button.nvcookies__button.nvcookies__button--primary.consent-give"))).click()
print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='price']")))])
  • 控制台输出:
['1,29 €/τεμ.', '1,45 €/τεμ.', '0,78 €/τεμ.', '1,82 €/τεμ.', '1,82 €/τεμ.', '1,57 €/τεμ.', '2,24 €/τεμ.', '2,62 €/τεμ.', '2,38 €/τεμ.', '1,32 €/τεμ.', '1,88 €/τεμ.', '2,24 €/τεμ.', '2,08 €/τεμ.', '1,18 €/τεμ.', '1,67 €/τεμ.', '2,08 €/τεμ.', '0,78 €/τεμ.', '2,57 €/τεμ.', '1,52 €/τεμ.', '1,62 €/τεμ.', '2,28 €/τεμ.', '2,05 €/τεμ.', '2,38 €/τεμ.', '2,40 €/τεμ.']

*注意:您必须添加以下导入:

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

相关问题