Python 3.x 在selenium上获取当前url时遇到问题
我想在运行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
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同意并更新了一些想法