在Python中使用Selenium检查URL更改的最佳方法是什么?

时间:2016-03-30 18:08:32

标签: python regex selenium url

那么,我想要做的是在特定网页上运行一个功能(这与我的正则表达式匹配)。

现在我每隔一秒检查一下它是否有效,但我确信有更好的方法(因为它会让网站充满请求)。

while flag:
    time.sleep(1)
    print(driver.current_url)
    if driver.current_url == "mydesiredURL_by_Regex":
        time.sleep(1)
        myfunction()

我想用WebDriverWait以某种方式做到这一点,但不确定如何。

5 个答案:

答案 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)

以下是将WebdriverWaitexpected_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))