【问题标题】:在正则表达式上设置等待 python selenium WebDriverWait()
【发布时间】:2022-01-23 14:06:56
【问题描述】:

这样我就有了一个等待页面上元素的工作代码:

wait = WebDriverWait(driver, 60)
    try:
        imo_giris = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id='P_ENTREE_HOME']")))
        imo_giris.send_keys(imo, "\n")
    except TimeoutException:
        print("None")
        driver.close()
        continue

如何将此 WebDriverWait() 模块集成到我的代码中,以便在我的页面源代码中找到电子邮件正则表达式? 这是我获取网站电子邮件正则表达式的代码:

    results = []
    for query in my_list:
        results.append(search(query, tld="com", num=3, stop=3, pause=2))

    for result in results:
        url = list(result)
        print(*url,sep='\n')
        for site in url:
            driver = webdriver.Chrome()
            driver.get(site)
            doc = driver.page_source
            emails = re.findall(r'[\w\.-]+@[\w\.-]+', doc)
            for email in emails:
                print(email)

我可以从页面上的源代码中找到电子邮件,但有时网站不活跃或因为源代码太长而需要很长时间。 我想将电子邮件正则表达式搜索减少到 10 秒,我该怎么做?

我解决了问题

我用更好的正则表达式替换了它。 我现在正在使用并且工作正常的正则表达式:

r'\b[A-Za-z0-9._%+-]+@(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,4}\b'

【问题讨论】:

    标签: python python-3.x regex selenium webdriverwait


    【解决方案1】:

    您可以创建一个custom expected condition,但这似乎有点矫枉过正。相反,您可以使用简单的 for 循环进行时间测量

    ...
    doc = driver.page_source
    emails = []
    end_time = time.time() + 10
    while time.time() < end_time and not emails:
        emails = re.findall(r'[\w\.-]+@[\w\.-]+', doc)
    print(emails)
    

    【讨论】:

    • 有时由于网站未打开,其余代码不起作用。我可以为此做些什么?
    • 我刚试了 10 秒后它仍然在等待。 :(
    • @aabb 他的网站没有打开听起来像是网站本身的问题,但我猜。请发布一个包含所有详细信息的新问题。
    • @aabb 它可能已经移动到下一个循环迭代,但是这段代码不会等待超过 10 秒。
    • 是的,当网站本身出现问题时,我会收到错误消息。我想阻止它。另外,对于其他的问题,我无法表达,我想,因为一些网站的源代码太多,它试图找到一个电子邮件大约 5-10 分钟,不幸的是我无法用你的代码阻止这一点,还是一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多