使用 selenium 从动态网页表中查找值
Posted
技术标签:
【中文标题】使用 selenium 从动态网页表中查找值【英文标题】:Using selenium to find values from a dynamic webpage table 【发布时间】:2020-07-24 18:58:33 【问题描述】:我有一个 python 代码,它使用 selenium 打开一个大学成绩网页,输入一些学生值并打开该学生的成绩页面。 结果页面有一个动态表格,我无法访问其 html 代码。如何找到特定行和列的值?
我打开大学成绩网页的python代码是:
from selenium.webdriver.support.ui import Select
firefox_browser = webdriver.Firefox(executable_path=r'C:\Program Files\gecko\geckodriver.exe')
firefox_browser.get("http://results.drait.in/")
time.sleep(5)
print("Opening firefox")
select = Select(firefox_browser.find_element_by_id('ugpg'))
select.select_by_visible_text('UG-SEE')
name_input = firefox_browser.find_element_by_css_selector("#usn")
play_button = firefox_browser.find_element_by_css_selector("#submit")
name_input.send_keys("1DA17ISxxx")
play_button.send_keys(Keys.ENTER)
print("Done")
上面的代码打开了主结果页面,其中包含学生注册的科目和相应的成绩。
如何根据主题代码和考试类型访问特定的行和列,并将该值返回到我的 python 代码以进行打印?
我无法找到结果页面的 HTML 代码以使用表格名称访问表格。
结果页面的首页是这样的:https://imgur.com/a/1ZgENY6
提供学生证后显示学科详细信息和成绩的结果页面如下所示:https://imgur.com/a/xDAJ7IL
谢谢
【问题讨论】:
无法访问您的链接,能否提供有效的 url 或 DOM? 使用这个:results.drait.in或者你可以点击这里的第一个链接:dr-ait.org/autonomy/results 两个都试过了,但是无法访问这个网站 没有别人的usn就看不到你说的结果页 检查中选择“UG-SEE”选项,对于USN,可以给1IDA17ISxxx,xxx的范围是002-045。这应该会让你进入结果页面 【参考方案1】:首先你要导入 selenium webdriver
from selenium import webdriver
然后您必须导入密钥才能启用输入密钥
from selenium.webdriver.common.keys import Keys
那么如果你想使用time.sleep()
你必须导入时间模块
import time
检查表格,您可以获取表格标签中所有<tr>
标签的xpath
您的 xpath 将如下所示 /html/body/form/center/table/tbody/tr[1]
从此删除索引值/html/body/form/center/table/tbody/tr
使用 len 方法可以看到有多少行
a = len(firefox_browser.find_elements_by_xpath("/html/body/form/center/table/tbody/tr"))
类似地使用 xpath 的 <th>
标记列
您的 xpath 将如下所示 /html/body/form/center/table/tbody/tr[1]/th[1]
从此删除<th>
标签/html/body/form/center/table/tbody/tr[1]/th
的索引值
使用 len 方法可以看到有多少列
b = len(firefox_browser.find_elements_by_xpath("/html/body/form/center/table/tbody/tr[1]/th"))
现在a
代表有多少行,b
代表列数
写一个for循环
for r in range(2,a+1):#starting from 2 because first rows is headings
for c in range(1,b+1):
#use the variables a and b instead of the index of <tr> and <th>
value =
firefox_browser.find_elements_by_xpath("/html/body/form/center/table/tbody/tr["+r+"]/th["+c+"]")
print(value.text)
如果你想使用 if 语句从特定标题中选择元素
这样使用
check=firefox_browser.find_elements_by_xpath("/html/body/form/center/table/tbody/tr[1]/th[1]")
if check.text == "your value":
#do something
【讨论】:
以上是关于使用 selenium 从动态网页表中查找值的主要内容,如果未能解决你的问题,请参考以下文章
使用 Selenium 和 Python 进行用户输入的网页抓取动态网站