Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在selenium上获取当前url时遇到问题_Python 3.x_Selenium - Fatal编程技术网

Python 3.x 在selenium上获取当前url时遇到问题

Python 3.x 在selenium上获取当前url时遇到问题,python-3.x,selenium,Python 3.x,Selenium,我想在运行Selenium时获取当前url。 我看了这一页: 并尝试了发布的内容,但不起作用。我在下面附上我的代码: from selenium import webdriver #launch firefox driver = webdriver.Firefox() url1='https://poshmark.com/search?' # search in a window a window driver.get(url1) xpath='//input[@id="user-search

我想在运行Selenium时获取当前url。 我看了这一页: 并尝试了发布的内容,但不起作用。我在下面附上我的代码:

from selenium import webdriver
#launch firefox
driver = webdriver.Firefox()
url1='https://poshmark.com/search?'

# search in a window a window
driver.get(url1)
xpath='//input[@id="user-search-box"]'
searchBox=driver.find_element_by_xpath(xpath)

brand="freepeople"

style="top"

searchBox.send_keys(' '.join([brand,"sequin",style]))

from selenium.webdriver.common.keys import Keys
#EQUIValent of hitting enter key
searchBox.send_keys(Keys.ENTER)



print(driver.current_url)

我的密码打印?但它应该打印出来:因为这就是硒的用途

问题在于,您的
搜索框。发送密钥(key.ENTER)
打印(driver.current\u url)
之间没有延迟

应该有一些时间延迟,以便语句可以选择url更改。若您的代码在url实际更改之前触发,那个么它只会提供旧的url

解决方法是增加
时间。睡眠(1)
等待1秒。不过,硬编码睡眠不是一个好的选择。您应该执行以下操作之一

  • 保持轮询url并等待更改发生或更改url
  • 等待新页面出现时您知道会出现的对象
  • 不要使用
    键。输入
    使用
    模拟操作。如果搜索按钮可用,请单击()

通常,当您在selenium中使用
单击
方法时,它会处理页面更改,因此您不会看到此类问题。在这里,您可以使用selenium按下一个键,它不会等待页面加载。这就是为什么您首先会看到这个问题

我也有同样的问题,我提出了使用默认显式等待()的解决方案

这是我的解决办法

class UrlHasChanged:
def __init__(self, old_url):
    self.old_url = old_url

def __call__(self, driver):
    return driver.current_url != self.old_url:


@contextmanager
def url_change(driver):
     current_url = driver.current_url
     yield
     WebDriverWait(driver, 10).until(UrlHasChanged(current_url))
说明:

  • 首先,我创建了自己的等待条件(),该条件将old_url作为参数(在执行操作之前的url),并在某些操作后检查old url是否与当前的_url相同。当两个URL相同时返回false,否则返回true
  • 然后,我创建了上下文管理器来包装我想要执行的操作,并在执行操作之前保存了url,然后使用WebDriverWait和created before wait条件
  • 多亏了该解决方案,我现在可以将此函数与任何更改url的操作一起重用,以等待更改,如下所示:

        with url_change(driver):
            login_panel.login_user(normal_user['username'], new_password)
    
        assert driver.current_url == dashboard.url
    
    它是安全的,因为
    WebDriverWait(driver,10)。until(UrlHasChanged(current_url))
    等待当前url发生更改,10秒后它将通过抛出异常停止等待


    您对此有何看法?

    我通过使用href单击按钮解决了此问题。然后做司机。得到(赫雷弗林克)。Click()不适合我

    问题是您的
    搜索框。发送密钥(key.ENTER)
    打印(driver.current\u url)
    之间没有延迟。应该有一些时间延迟,以便语句可以选择url更改。若您的代码在url实际更改之前触发,那个么它只会提供旧的url。解决方法是增加
    时间。睡眠(1)
    等待1秒。嗯,我想知道这是否是问题所在!谢谢!:)“最好等URL更改,而不是等硬编码的一秒钟。”JeffC同意并更新了一些想法