首页 > 解决方案 > 在某些请求后获取python 3中新生成的URL?

问题描述

我想在其搜索栏中发布/请求某些内容后获取任何站点的新生成的 URL,但面临一些困难。这是我的代码:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys

    driver = webdriver.Firefox()
    driver.get("https://www.amazon.com")

    username = driver.find_element_by_name("field-keywords")
    username.send_keys("samsung s8")
    driver.find_element_by_name("field-keywords").send_keys(Keys.ENTER)
    print(driver.current_url)

我希望它显示“ https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=samsung+s8 ”作为输出,但它显示https://www.amazon.com /

如果我替换这条线

    driver.find_element_by_name("field-keywords").send_keys(Keys.ENTER)

用这条线

    driver.find_element_by_class_name("nav-input").click()

它工作正常。我想在不使用 click() 函数的情况下获取新 URL,因为为此我还必须获取搜索按钮的 id/name 才能执行点击,而在“Keys.ENTER”的情况下,我只需要搜索栏的 id,这使我的代码更通用。

标签: python-3.xselenium-webdriver

解决方案


当您使用 Firefox 驱动程序时,它会显示https://www.amazon.com,因为 Firefox 需要时间加载整个内容,因此当前的 Url 会被打印出来

这适用于我身边的 chrome 驱动程序:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome('/usr/bin/chromedriver')
driver.get("https://www.amazon.com")

username = driver.find_element_by_name("field-keywords")
username.send_keys("samsung s8")
username.send_keys(Keys.ENTER)
print(driver.current_url)

使用 Firefox 驱动程序,为了显示当前 url,我使用 time 模块让它休眠了几秒钟,它工作正常

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Firefox()
driver.get("https://www.amazon.com")

username = driver.find_element_by_name("field-keywords")
username.send_keys("samsung s8")
username.send_keys(Keys.ENTER)
time.sleep(10)
print(driver.current_url)

推荐阅读