2017-10-09 81 views
0

我现在用硒练,但我似乎无法得到它的打印正确的URL。硒不打印出正确的URL

import time 
from selenium import webdriver 

driver = webdriver.Firefox() 
home_page = '' 
driver.get(home_page) 


time.sleep(15) 
for i in range(1,9): 
    listing_page = driver.find_element_by_xpath('//*[@id="m_property_lst_cnt_realtor_more_'+str(i)+'"]').click() 
    realtor_url = driver.find_element_by_xpath('//*[@id="lblMediaLinks"]/a').click() 
    print(driver.current_url) 
    driver.get(home_page) 
    time.sleep(5) 

我需要在selenium点击realtor_url中的元素时打开的网页的URL。它会打印来自listing_page的第一次点击的网址。

(注:即从realtor_url打开是完全不同的网站,如果这能帮助网页)

回答

0

您需要打印网址前切换到新打开的窗口,然后关闭新打开的窗口并切换回到原来的窗口。

// do the click that opens another window 
WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) == 2) 
driver.switch_to_window(driver.window_handles[1]) 
print(driver.current_url) 
driver.close() 
driver.switch_to_window(driver.window_handles[0]) 

一对夫妇的其他东西......

  1. .click()回报void,即什么都没有,所以没有什么永远保存在listing_pagerealtor_url变量。

  2. sleep()是一种不好的做法。不要使用它。谷歌它找出详细的原因。与相关WebDriverWait更换sleep()

+0

它正在做的是点击房地产列表,然后从该页面点击代理网站并打印出他们网页的网址。网页上有9个列表,因此它通过该行并为每个列表执行此操作。 – Dotpy

+0

我现在看到。我在第一次点击声明中错过了“我”。我添加了一些细节。 – JeffC

+0

不用担心,我的等待时间修修补补第二个URL,但问题是,打印(driver.current_url)打印从第一个实例,而不是从我希望它的新网页的URL。你和Kiran的答案都解决了很多挫折!谢谢:) – Dotpy

0

我相信你需要改变窗口的“焦点”才能打印正确的URL。当前窗口处理程序可能指向前一次单击,而不是将焦点更改为新窗口。 尝试并改变“窗口处理程序”。每个新窗口都有一个处理程序。

我希望这会有所帮助。 window_handles或者这Handle multiple window in Python

编辑:

以下应为您带来最新的开放窗口。

driver.switch_to_window(driver.window_handles[-1])