【问题标题】:Selenium isn't returning current urlSelenium 没有返回当前网址
【发布时间】:2019-02-03 21:15:23
【问题描述】:

我正在设置一个 python 脚本来访问一家航运公司的网站并输入一个跟踪号并获取发货和交货日期,但我在使用 selenium current_url 方法时遇到了问题。我拥有的代码打开初始浏览器窗口并输入跟踪号并转到货件状态页面,但我在结果页面上找不到表格项目。起初我以为这是我寻找表格项目的方式,但我发现结果页面 url 仍然与我开始的初始 url 相同。我什至添加了一个隐式等待时间来确保页面已经加载并且仍然保持不变。这是我的代码的样子:

我认为在结果页面上查找 table 元素仍然存在问题,但我无法确定我是否正在搜索正确的 url,所以我需要先解决这个问题。任何帮助将不胜感激。

谢谢 最大

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
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.Chrome('C:/Users/USER/chromedriver_win32/chromedriver.exe')
driver.get("http://www.dovelogistics.com/track-shipment/")

elem = driver.find_element_by_name("txtInputNo")
elem.clear()
elem.send_keys("224893")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source

driver.implicitly_wait(5)

resultsPage = driver.current_url
driver.get(resultsPage)

driver.get("http://206.50.6.81/WebtrakWT/shipinquiry/ShipInfo.aspx? 
 OrderNo=26198&Back=ShipLookup&TrackType=HousebillNo&TrackNo=224893")

elem = driver.find_element_by_xpath("//*[@id='Table5']")
print (elem)

driver.close()   

【问题讨论】:

  • 您能否删除多余的代码并留下一个准确显示您所看到内容的示例。你的问题也很不清楚。
  • 您也有换行符,使代码无法按原样运行

标签: python selenium


【解决方案1】:

您应该接受 Jens Dibbern 解决方案,但只是想指出,一旦您的 url 传入,您也可以使用 pandas 拉出该表进行解析:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd


driver = webdriver.Chrome()
driver.get("http://www.dovelogistics.com/track-shipment/")

elem = driver.find_element_by_name("txtInputNo")
elem.clear()
elem.send_keys("224893")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source

driver.implicitly_wait(5)

driver.switch_to.window(driver.window_handles[1])
resultsPage = driver.current_url
driver.get(resultsPage)

html = driver.page_source

tables = pd.read_html(html)
table = tables[5]

driver.close()

输出:

print (table)
                        0                                                  1
0       Status Updated On                                               Note
1    12/4/2018 1:07:00 PM                  Shipment Status changed to: Rated
2    12/4/2018 1:07:00 PM  Signed for By: Delivered at KWA 1:07:00 PM 12/...
3    12/4/2018 9:37:43 AM                     Email Status Notification Sent
4   12/2/2018 11:50:00 AM      Shipment Status changed to: Shipment Departed
5    12/1/2018 2:12:00 PM       Shipment Status changed to: Shipment Arrived
6   12/1/2018 10:39:00 AM      Shipment Status changed to: Shipment Departed
7    12/1/2018 9:28:00 AM       Shipment Status changed to: Shipment Arrived
8   11/30/2018 2:53:55 PM  Shipment Status changed to: Shipment Departed ...
9   11/28/2018 8:42:23 PM  Shipment Status changed to: On-Hand At Origin ...
10  11/28/2018 5:53:47 PM  Shipment Status changed to: Dispatched for Pickup

【讨论】:

  • 非常感谢。这将在下一步帮助我!
【解决方案2】:

该网站打开另一个窗口。你必须切换到那个窗口。他们不止一次地使用表 ID 标签。这应该会有所帮助:

driver = webdriver.Chrome()
driver.get('http://www.dovelogistics.com/track-shipment/')
elem = driver.find_element_by_name("txtInputNo")
elem.clear()
elem.send_keys("224893")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source

driver.switch_to.window(driver.window_handles[1])
print(driver.current_url)

elem = driver.find_elements_by_id("Table1")
print (elem)

driver.close()

你必须应付他们的嵌套表格和重复的 id 标签。

【讨论】:

  • 非常感谢。我会试试的。我不知道需要切换窗口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多