【问题标题】:Retrieve updated url in selenium using python使用 python 在 selenium 中检索更新的 url
【发布时间】:2018-11-28 08:07:08
【问题描述】:

如何使用 selenium 和 Python 从 firefox 浏览器获取更新的 url?下面的代码是我正在尝试做的一个很好的工作示例。该脚本打开一个 url,在网页中查找搜索栏,粘贴特定产品,然后执行搜索。

我正在尝试在搜索完成后提取更新后的 url,它应该是 https://www.myntra.com/avene-unisex-thermal-spring-water-50-ml,但我得到的是 https://www.myntra.com/。如何获取所需的网址?

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

firefoxOptions = webdriver.FirefoxOptions()
firefoxOptions.set_preference("dom.webnotifications.enabled", False)

driver = webdriver.Firefox(firefox_options = firefoxOptions)

driver.implicitly_wait(5)

# Maximize the browser window
driver.maximize_window()

# navigate to the home page
driver.get("https://www.myntra.com/")

# Locate the text field to update values
text_field = driver.find_element_by_class_name("desktop-searchBar")

# Clears any value already present in text field
text_field.clear()

# Updates the string in search bar
text_field.send_keys("Avene Unisex Thermal Spring Water 50 ml")
text_field.send_keys(Keys.ENTER)

new_page = driver.current_url
print(new_page)

driver.close()

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver webdriverwait


    【解决方案1】:

    看来你已经很接近了。您需要诱导 WebDriverWait 以使 url 得到更改,您可以使用以下解决方案:

    • 代码块:

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
      driver=webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
      driver.get("https://www.myntra.com/")
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.desktop-searchBar"))).send_keys("Avene Unisex Thermal Spring Water 50 ml")
      driver.find_element_by_css_selector("a.desktop-submit").click()
      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h1.title-title")))
      print(driver.current_url)
      driver.quit()
      
    • 控制台输出:

      https://www.myntra.com/avene-unisex-thermal-spring-water-50-ml
      

    【讨论】:

    • 只是想知道为什么在driver.find_element 行之前使用了WebDriverWait
    • 那是我的坏额外的行。修复。如果您现在有任何疑问,请告诉我。
    • 这行得通。谢谢你。老实说,我不确定WebDriverWait 步骤在做什么以及为什么它被使用了两次。我还有很多东西要学。
    • 另外,在上面的例子中,有没有办法让webdriver点击搜索到的产品?如果您有时间可以指导我,我将不胜感激。
    • 很高兴您提出这个问题。第一个 WebDriverWait() 是等待(初始页面加载/html 渲染)第一个所需元素,即 搜索框 可点击,以便您可以发送文本。第二个WebDriverWait() 是等待(新页面/html 渲染)下一个所需元素,即<h1> 元素可见,这将确保url 已解决,因此我们可以检索 url i> 用于下一步/验证。如果有任何疑问,请告诉我。
    【解决方案2】:

    您需要在text_field.send_keys(Keys.ENTER) 之后等待更新信息, 如果您不想等待,请尝试使用 click() 方法而不是 send_keys

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-02
      • 2021-09-14
      • 2021-09-08
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 2021-12-05
      相关资源
      最近更新 更多