【问题标题】:How to make python script wait until entering specific URL如何让python脚本等到输入特定的URL
【发布时间】:2019-07-14 22:34:49
【问题描述】:

我希望通过输入带有特定地址部分的特定 URL 来触发 python 脚本。

这是一个例子:

http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1234
#1234 can be any random 4 digits Number

基本上我希望 python 脚本在 URL 中包含“http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=”时激活。

这是我目前写的:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome('./chromedriver')
wait = WebDriverWait(driver, 9999)
desired_url = http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=\d{4}
def wait_for_correct_current_url):
      wait.until(lambda driver: driver.current_url == desired_url)



driver.get("http://www.google.com")
wait_for_correct_current_url(desired_url)
**(Script that activates after entering desired_url)**

我想知道正则表达式是否可以解决问题,但我是 python 新手……所以我知道什么。

提前致谢!

【问题讨论】:

标签: python selenium url selenium-webdriver random


【解决方案1】:

这样使用,

from selenium.webdriver.support import expected_conditions as EC

WebDriverWait(driver, 1000).until(EC.url_contains("desired_url"))

【讨论】:

    【解决方案2】:

    更多关于您的用例的信息将有助于提供更规范的答案。

    但是,如果要调用具有特定地址部分的 URL 是随机的,您可以通过 range() 识别范围并通过 format() 迭代范围以构造完整的 URL,您可以使用以下解决方案:

    • 代码块:

      for i in range(1000,1010):
          desired_url = "http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER={}".format(i)
          print(desired_url)
      
    • 控制台输出:

      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1000
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1001
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1002
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1003
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1004
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1005
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1006
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1007
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1008
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1009
      

    如果您正在寻找随机数作为 URL 的一部分,您可以使用randrange() 生成如下:

    • 代码块:

      import random
      
      for i in range(0,10) :
          desired_url = "http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER={}".format(str(random.randrange(1000, 9999)))
          print(desired_url)
      
    • 控制台输出:

      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=8776
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1662
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=3255
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=1524
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=6463
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=4511
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=3273
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=7471
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=4672
      http://11.111.11.11:0000/Menu_EXAMPLE.jsp?NUMBER=2828
      

    【讨论】:

      【解决方案3】:

      尝试了以上所有答案,但没有运气。不管怎么说,多谢拉。 我想我的解释还不够

      这对我有用。

      def condition(driver):
      look_for = ("Any word within expected URL1", "Any word within expected URL2")
      url = driver.current_url
      for s in look_for:
          if url.find(s) != -1:
              [Any Script I want to activate]
      
      return False
      
      wait.until(condition)
      

      【讨论】:

      • 此解决方案如何回答您 mentioned ...脚本通过输入具有特定地址部分的特定 URL... 来触发的问题...对于 ...我想知道正则表达式是否可以解决问题,但我是 python 新手...所以我知道什么...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多