那么,我想要做的是在特定网页上运行一个功能(这与我的正则表达式匹配)。
现在我每隔一秒检查一下它是否有效,但我确信有更好的方法(因为它会让网站充满请求)。
while flag:
time.sleep(1)
print(driver.current_url)
if driver.current_url == "mydesiredURL_by_Regex":
time.sleep(1)
myfunction()
我想用WebDriverWait
以某种方式做到这一点,但不确定如何。
答案 0 :(得分:9)
我想用WebDriverWait以某种方式做到这一点
完全。首先,看看built-in Expected Conditions是否可以解决这个问题:
title_is
title_contains
样本用法:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
wait.until(EC.title_is("title"))
wait.until(EC.title_contains("part of title"))
如果没有,您可以随时创建custom Expected Condition以等待网址与所需的正则表达式匹配。
答案 1 :(得分:3)
这是我最终实现它的方式。适合我:
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 5)
desired_url = "https://yourpageaddress"
def wait_for_correct_current_url(desired_url):
wait.until(
lambda driver: driver.current_url == desired_url)
答案 2 :(得分:2)
以下是将WebdriverWait
与expected_conditions
结合使用的示例:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
url = 'https://example.com/before'
changed_url = 'https://example.com/after'
driver = webdriver.Chrome()
driver.get(url)
# wait up to 10 secs for the url to change or else `TimeOutException` is raised.
WebDriverWait(driver, 10).until(EC.url_changes(changed_url))
答案 3 :(得分:1)
要真正知道网址已更改,您需要知道旧网址。使用WebDriverWait
在Java中的实现将类似于:
wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.not(ExpectedConditions.urlToBe(oldUrl)));
我知道问题出在Python上,但它很容易翻译。
答案 4 :(得分:0)
使用url_matches
Link将正则表达式模式与url匹配。它确实re.search(pattern, url)
from selenium import webdriver
import re
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
pattern='https://www.example.com/'
driver = webdriver.Chrome()
wait = WebDriverWait(driver,10)
wait.until(EC.url_matches(pattern))