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

标签 python selenium

为了得到我想要的文字

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/

相关文章:

python - 扩展 setuptools 扩展以在 setup.py 中使用 CMake?

javascript - 错误 : done() invoked with non-Error: {}

android - Android 上 Cordova/Phonegap Webview 的自动测试

java - 使用辅助功能 ID 和 xpath 错误单击菜单

python - 单击 Python Selenium 中特定行上表中的按钮

python - 编码风格 - 将括号保持在同一行或新行上?

python - 为什么 python 在多行中打印一个多位数字?

Mac 上的 Python Multiprocessing Pool.map() 串行而不是并行运行进程

python - 语法警告 : name 'color' is assigned to before global declaration global color Python

java - 每次跳过该方法时都使用 TestNG 符号,例如 @parameters 或 @dataprovider...