gpt4 book ai didi

python - 在 Python Selenium 中,如何等待找到两个元素并继续循环

转载 作者:行者123 更新时间:2023-12-01 06:23:47 24 4
gpt4 key购买 nike

为了得到我想要的文字

d1 = wait.until(EC.visibility_of_element_ located((By.XPATH, '//*[@id="container"]/table[1]/tbody/tr')).text

我需要等待 wait.until(EC.presence_of_element_ located((By.CSS_SELECTOR, 'a.lated-keyword-item')))wait.until(EC .presence_of_element_ located((By.CSS_SELECTOR, 'span.lated-keyword-item'))) 与特定文本值一起上传以获得 d1

上面ky是进入页面的代码,我的问题是ky下面的代码。

如果没有找到wait.until(EC.presence_of_element_ located((By.CSS_SELECTOR, 'a.lated-keyword-item'))),则会等待wait.until (EC.presence_of_element_ located((By.CSS_SELECTOR, 'span.lated-keyword-item')))。但如果已经没有第一个元素,我不想等待 60 秒继续等待第二个元素。

如果我在ky中添加超过数千个关键字,则会出现raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message: try

我已经尝试解决这个问题一个多星期了,我迫切需要有人帮助我。这是我的代码,该代码仅适用于 ky 中的数百个关键字。

import xlrd
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException


driver = webdriver.Chrome(executable_path=r"C:\Users\Kim woo jae\PycharmProjects\100개 키워드\chromedriver.exe")
list = []
list1 = []
list2 = []
list3 = []

driver.get("https://itemscout.io/keyword/")
wait = WebDriverWait(driver, 60)
b = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="container"]/div[2]/input')))
b.clear()
b.send_keys('화장대')
c = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="container"]/div[2]/span')))
c.click()
d = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[ @id="container"]/table[1]/tbody/tr'))).text



ky = '화장대','침대전신거울','서랍장','까사마루3단행거','옷장', '5단서랍장','6평농막'

for k in ky:
b1 = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="container"]/div[1]/input')))
b1.clear()
b1.send_keys(k)
c1 = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="container"]/div[1]/span')))
c1.click()
time.sleep(1)
try:
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a.related-keyword-item')))
except:
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'span.related-keyword-item')))
d1 = wait.until(EC.visibility_of_element_located((By.XPATH, '//*[@id="container"]/table[1]/tbody/tr'))).text
d1 = (d1).replace(',', '.')
d1 = ' '.join(d1.splitlines())
d1 = d1.replace(' ', ',')
result = [x.strip() for x in d1.split(',')]

d = [result[2]]
s = [result[3]]
c = [result[4]]
print([k],d,s,c)

最佳答案

您可以在 CSS_SELECTOR 中使用或,。如果找到,它将返回第一个,否则返回第二个。它将检查每个 DOM 是否被拉取

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'a.related-keyword-item, span.related-keyword-item')))

关于python - 在 Python Selenium 中,如何等待找到两个元素并继续循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60263255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com