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

gyu*_*ula 3 python regex url selenium

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

现在我每秒都在检查它并且它有效,但我确信有一种更好的方式(因为它充满了请求的网站).

while flag:
    time.sleep(1)
    print(driver.current_url)
    if driver.current_url == "mydesiredURL_by_Regex":
        time.sleep(1)
        myfunction()
Run Code Online (Sandbox Code Playgroud)

我想以某种方式这样做WebDriverWait但不确定如何.

Sve*_*ohn 12

这就是我最终实现它的方式。对我来说效果很好:

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)
Run Code Online (Sandbox Code Playgroud)


ale*_*cxe 10

我想用WebDriverWait以某种方式做到这一点

究竟.首先,看看内置的预期条件是否可以解决这个问题:

  • 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"))
Run Code Online (Sandbox Code Playgroud)

如果没有,您始终可以创建自定义预期条件以等待URL匹配所需的正则表达式.


小智 6

要真正知道 URL 已更改,您需要知道旧的。WebDriverWait在 Java 中使用实现将类似于:

wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.not(ExpectedConditions.urlToBe(oldUrl)));
Run Code Online (Sandbox Code Playgroud)

我知道这个问题是针对 Python 的,但它可能很容易翻译。


Cor*_*erg 6

WebdriverWait这是使用with的示例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))
Run Code Online (Sandbox Code Playgroud)