如何在python中获取当前网页的URL?

时间:2019-12-20 04:52:18

标签: python selenium youtube webdriver webdriverwait

我正在使用硒,我正在尝试将驱动程序更改为打开的新页面(相同的标签) driver.switch_to似乎不起作用,因为我认为在打开新窗口时会使用它 driver.current_url似乎也不起作用,因为它给了我上一页的网址,而我似乎无法弄清楚如何获取当前页的网址

此处提供代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver.get("https://www.youtube.com")

searchBar = driver.find_element_by_name("search_query")
searchBar.send_keys("unbox therapy")
searchBar.send_keys(Keys.ENTER)

print(driver.current_url)

这仍然返回https://www.youtube.com 我需要看起来应该像的搜索查询 https://www.youtube.com/results?search_query=unbox+therapy

3 个答案:

答案 0 :(得分:2)

您应该在添加一些等待时间之前  driver.current_url 由于需要花费一些时间才能完全加载该站点。加载时间还取决于Internet连接速度和其他因素。对我来说,它无需等待就可以工作。

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

driver = webdriver.Chrome("/home/teknath/Desktop/chromedriver")
driver.get("https://www.youtube.com")

searchBar = driver.find_element_by_name("search_query")
searchBar.send_keys("unbox therapy")
searchBar.send_keys(Keys.ENTER)
time.sleep(5)
print(driver.current_url)

答案 1 :(得分:0)

就像Tek Nath所说,您可以增加等待时间,但是您也可以这样做。

searchTerm = "unbox therapy"
replaceSpaceWithPlus(searchTerm)
driver.get("https://www.youtube.com/results?search_query=" + searchTerm)

答案 2 :(得分:0)

@TekNath答案是正确的方向,几乎是完美的。但是,我建议避免在代码中使用 time.sleep(5)

  

time.sleep(secs)在给定的秒数内暂停当前线程的执行。该参数可以是浮点数,以指示更精确的睡眠时间。实际的暂停时间可能少于请求的暂停时间,因为任何捕获到的信号都会在执行该信号的捕获例程后终止sleep()。另外,由于系统中其他活动的安排,暂停时间可能比请求的时间长任意数量。

您可以在How to sleep webdriver in python for milliseconds

中找到详细的讨论

或者,您可以为title_contains()引入 WebDriverWait ,并可以使用以下Locator Strategy

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.keys import Keys
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://www.youtube.com/")
    searchBar = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#search")))
    searchBar.send_keys("unbox therapy")
    searchBar.send_keys(Keys.ENTER)
    WebDriverWait(driver, 10).until(EC.title_contains("unbox therapy"))
    print(driver.current_url)
    
  • 控制台输出:

    https://www.youtube.com/results?search_query=unbox+therapy