Python selenium从表中提取数据并单击
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python selenium从表中提取数据并单击相关的知识,希望对你有一定的参考价值。
亲爱的stackoverflow社区,
我最近在尝试从以下位置提取数据时遇到了麻烦:
https://www2.sgx.com/securities/corporate-information?country=SINGAPORE
我的目的是单击表格中的每个链接,从3CNERGY LIMITED开始,打开另一个网页选项卡,解压缩,解压后关闭该选项卡,返回主页面,然后单击下一个链接。
我的问题是:无法找到让我通过表循环的元素,无法从主网页切换到选项卡然后返回。
我的进步:我想
<sgx-table-list data-rendered-rows="20" data-visible-rows="10" style="min-width: 560px; transform: translateY(0px);" data-rendered-index="0" data-visible-index="0" xpath="1">
允许我循环通过表但len只返回1 ..
我已经能够点击第一个网页使用:
CE = driver.find_element_by_xpath("//a[contains(@href, 'infopub')]")
但是无法通过表循环,脚本只执行第一次单击。此外,我无法通过xpath更改它以查找元素,因为它变为列表而.click()不起作用。
任何帮助将不胜感激。谢谢!!
答案
继续尝试下面的内容。我使用了XPath Helper Wizard,它是铬的插件。
链接的主表:(将sgx-table-row [RowNumberHere]更改为循环通过第1列中的公司)
driver.find_element_by_xpath("//sgx-table-row[1]/sgx-table-cell-link[contains(@class, 'sgx-table-cell')]").click()
在公司内部链接链接:(将/ tr [RowNumberHere]更改为您的变量以进行循环)
driver.find_element_by_xpath("//table[3]/tbody/tr[1]/td[contains(@class, 'basicInfoContentContainerRight')]")
回到页面:
driver.back()
另一答案
这应该非常简单。流程应该是这样的:
- 导航到该页面
- 关闭弹出对话框
- 等待加载数据
- 循环浏览公司链接,单击每个链接,从新选项卡获取数据,关闭新选项卡,切换回主窗口
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
url = "https://www2.sgx.com/securities/corporate-information?country=SINGAPORE"
driver.get(url)
wait = WebDriverWait(driver, 10)
# close the preview warning dialog
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#beta-warning-dialog button"))).click()
# wait for the data to be loaded
company_name_locator = (By.CSS_SELECTOR, "div.table-container a")
wait.until(EC.visibility_of_element_located(companyNameLocator))
main_window_handle = driver.current_window_handle
# loop through visible company links
links = list(filter(lambda e: e.is_displayed(), driver.find_elements(companyNameLocator)))
for link in links
link.click()
# wait for new tab to open
wait.until(lambda d: len(d.window_handles) == 2)
driver.switch_to_window(driver.window_handles[1])
# scrape something off the page
print(wait.until(EC.visibility_of_element_located(By.ID, "ctl07_lblCompName")).text)
# close the current tab
driver.close()
# wait for the tab to be closed and switch back to the main tab
wait.until(lambda d: len(d.window_handles) == 1)
driver.switch_to_window(main_window_handle)
以上是关于Python selenium从表中提取数据并单击的主要内容,如果未能解决你的问题,请参考以下文章