使用 Python 提取 Selenium 弹出数据
Selenium popup data extraction using Python
我是一名 Selenium 初学者,希望通过 Selenium 和 Python.
从弹出窗口 windows (HTML) 中提取数据
这是网站:
https://www.drayage.com/directory/results.cfm?city=SAV&port=y&OceanCntrs=y&drvrs=y&showClicks=y
我正在尝试单击每个公司的“详细信息”弹出窗口并提取所有数据。这是我目前所拥有的(抱歉,不多!),只需单击第一个“详细信息”弹出窗口即可。
#import packages
from selenium import webdriver
#create filepath for correct chrome webdriver
path = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(path)
driver.get("https://www.drayage.com/directory/results.cfm?city=SAV&port=y&OceanCntrs=y&drvrs=y&showClicks=y")
driver.find_element_by_link_text("detail").click()
如果我能为每个弹出窗口获得一个文本块,这甚至足以让我通过分隔符分隔并在 SQL 中清理。
我的问题是如何提取所有这些以及如何连续单击每个“详细信息”弹出窗口。
非常感谢您的帮助!
更新 1
感谢到目前为止的评论!
一旦我通过单击“详细信息”进入弹出窗口 window,我将尝试从具有 XPATH“/html/body/table[1]”的第一个 table 中提取所有内容。
很遗憾,以下代码无法正常工作。如果您能提供帮助,请告诉我,再次感谢您!
table = driver.find_element_by_xpath("/html/body/table[1]")
for i in driver.find_elements_by_xpath("/html/body/table[1]/tbody"):
data = [table.text for table in i.find_elements_by_xpath(".//*[self::td]")]
print(data)
wait=WebDriverWait(driver,10)
driver.get("https://www.drayage.com/directory/results.cfm?city=SAV&port=y&OceanCntrs=y&drvrs=y&showClicks=y")
trs=wait.until(EC.visibility_of_all_elements_located((By.XPATH,"//html/body/table/tbody/tr/td/table[1]//tr[position()>2]")))
window_before = driver.window_handles[0]
for tr in trs:
try:
detail=tr.find_element(By.XPATH,".//a[contains(.,'detail')]")
detail.click()
#Handle the tab switch
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)
#Do what you want here.
driver.close()
driver.switch_to.window(window_before)
except:
print('No detail')
这是一个示例,用于处理转到选项卡的链接处理、关闭选项卡然后返回到默认选项卡。我不确定您希望如何获取这些值,您可以尝试搜索 table.
导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
我是一名 Selenium 初学者,希望通过 Selenium 和 Python.
从弹出窗口 windows (HTML) 中提取数据这是网站: https://www.drayage.com/directory/results.cfm?city=SAV&port=y&OceanCntrs=y&drvrs=y&showClicks=y
我正在尝试单击每个公司的“详细信息”弹出窗口并提取所有数据。这是我目前所拥有的(抱歉,不多!),只需单击第一个“详细信息”弹出窗口即可。
#import packages
from selenium import webdriver
#create filepath for correct chrome webdriver
path = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(path)
driver.get("https://www.drayage.com/directory/results.cfm?city=SAV&port=y&OceanCntrs=y&drvrs=y&showClicks=y")
driver.find_element_by_link_text("detail").click()
如果我能为每个弹出窗口获得一个文本块,这甚至足以让我通过分隔符分隔并在 SQL 中清理。
我的问题是如何提取所有这些以及如何连续单击每个“详细信息”弹出窗口。
非常感谢您的帮助!
更新 1
感谢到目前为止的评论!
一旦我通过单击“详细信息”进入弹出窗口 window,我将尝试从具有 XPATH“/html/body/table[1]”的第一个 table 中提取所有内容。
很遗憾,以下代码无法正常工作。如果您能提供帮助,请告诉我,再次感谢您!
table = driver.find_element_by_xpath("/html/body/table[1]")
for i in driver.find_elements_by_xpath("/html/body/table[1]/tbody"):
data = [table.text for table in i.find_elements_by_xpath(".//*[self::td]")]
print(data)
wait=WebDriverWait(driver,10)
driver.get("https://www.drayage.com/directory/results.cfm?city=SAV&port=y&OceanCntrs=y&drvrs=y&showClicks=y")
trs=wait.until(EC.visibility_of_all_elements_located((By.XPATH,"//html/body/table/tbody/tr/td/table[1]//tr[position()>2]")))
window_before = driver.window_handles[0]
for tr in trs:
try:
detail=tr.find_element(By.XPATH,".//a[contains(.,'detail')]")
detail.click()
#Handle the tab switch
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)
#Do what you want here.
driver.close()
driver.switch_to.window(window_before)
except:
print('No detail')
这是一个示例,用于处理转到选项卡的链接处理、关闭选项卡然后返回到默认选项卡。我不确定您希望如何获取这些值,您可以尝试搜索 table.
导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC