为了得到我想要的文字
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/