Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium返回错误的元素,选择第一个同级元素,而不是查看元素本身_Python_Html_Selenium_Selenium Webdriver_Web Scraping - Fatal编程技术网

Python Selenium返回错误的元素,选择第一个同级元素,而不是查看元素本身

Python Selenium返回错误的元素,选择第一个同级元素,而不是查看元素本身,python,html,selenium,selenium-webdriver,web-scraping,Python,Html,Selenium,Selenium Webdriver,Web Scraping,我试图遍历元素列表并打印文本,但是当我在另一个元素中选择一个元素时,selenium返回第一个同级元素中的元素,而不是我真正感兴趣的元素中的元素,这是非常奇怪和令人沮丧的。 这是我试图从中获取的网站,我正在查看模块部分。 我的代码的关键部分: 导入时间 从selenium.webdriver导入Chrome 从selenium.webdriver.chrome.options导入选项 opts=Options() opts.add_参数('--headless') driver=Chrome(可

我试图遍历元素列表并打印文本,但是当我在另一个元素中选择一个元素时,selenium返回第一个同级元素中的元素,而不是我真正感兴趣的元素中的元素,这是非常奇怪和令人沮丧的。 这是我试图从中获取的网站,我正在查看模块部分。 我的代码的关键部分:

导入时间
从selenium.webdriver导入Chrome
从selenium.webdriver.chrome.options导入选项
opts=Options()
opts.add_参数('--headless')
driver=Chrome(可执行文件路径='D:\Programs\Python\chromedriver.exe',options=opts)
驱动程序。获取(“https://www.thecompleteuniversityguide.co.uk/courses/details/computing-science-with-a-year-in-industry-bsc/54983514")
closeButton=driver.find\u element\u by_xpath(“//a[@id='closeFilter']”)
关闭按钮。单击()
驱动程序。通过xpath(//a[@id='acceptCookie'])查找元素。单击()
modules_container=driver.find_element_by_xpath(“//div[@data subsec='modules']”)。find_element_by_class_name(“cdsb_rt”)
numberOfModulesByYear=len(模块\u容器。通过\u xpath(//div[@class='mdldv'])查找\u元素)
previousNumberOfModules=0
对于范围内的模块EAR(模块数按年份):
moduleYearButtonString=“//div[@class='mdldv'和@data module sections='{}']”。格式(str(moduleYear))
module_year=modules_container.find_element_by_xpath(moduleYearButtonString)
模块年=模块年。通过标签名(“a”)查找元素
睡眠时间(0.5)
而模块_year _a.通过_标记_名称(“span”).获取_属性(“类”)==“图标图标添加”查找_元素”:
模块\年份\点击()
而len(module_year.find_elements_by_xpath(“//div[@class='mdiv']))-previousNumberOfModules==0:
睡眠时间(0.01)
listOfModules=module_year。通过xpath(“//div[@class='mdiv']”)查找元素
previousNumberOfModules=len(模块\u year.find \u elements \u by \u xpath(“//div[@class='mdiv']”)表示)
对于枚举中的模块(模块列表):
打印(module.find_element_by_tag_name(“a”)。find_element_by_xpath(“//span[@class='mdltxt']”)。get_属性(“outerHTML”))
打印(“\n”)
我得到的结果是:

<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>


<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>


<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>


<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
编程1(20学分)-核心
这对我来说毫无意义?当我检查a元素HTML时,它显示了正确的名称,但是当我试图通过xpath函数访问它时,它返回了错误的名称? 有人能帮我弄清楚为什么会这样吗?如果这是预期的行为,那么它似乎难以置信地不直观

编辑: 对于将来可能阅读本文的人,我对xpath做了更多的研究,在查看了way-too网站的解释之后,如果您想查看当前节点,并且只查看当前节点的子元素,请以
“/”
开始xpath,句号表示它只查看该元素,而//表示它是相对的(我相信是这样) 这不是一个xpath问题,只是一个简单的格式问题,对于不熟悉这种东西的人来说可能会很可怕。祝大家好运


解释:

这似乎是相对XPath的问题?我不太确定。但当我使用类名查找元素时,它会起作用:

print(module.find_element_by_tag_name(“a”)。find_element_by_class_name(“mdltxt”)。get_属性(“outerHTML”))
编程1(20学分)-核心
数据库系统(20学分)-核心
基于Web的编程(20学分)-核心
系统开发(20学分)-核心
计算原理(20学分)-核心
编程1(20学分)-核心
数据库系统(20学分)-核心
基于Web的编程(20学分)-核心
系统开发(20学分)-核心
计算原理(20学分)-核心
软件工程1(20学分)-核心
编程2(20学分)-核心
体系结构和操作系统(20学分)-核心
数据结构和算法(20学分)-核心
工业年份(80学分)-核心
工业项目报告(40学分)-核心

这是一个非常棘手的问题,但是在深入研究XPath之后,在开头添加一个句号似乎可以解决这个问题!但是这确实有帮助,谢谢
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Database Systems (20 credits) - Core</span>
<span class="mdltxt">Web-Based Programming (20 credits) - Core</span>
<span class="mdltxt">Systems Development (20 credits) - Core</span>
<span class="mdltxt">Computing Principles (20 credits) - Core</span>
<span class="mdltxt">Programming 1 (20 credits) - Core</span>
<span class="mdltxt">Database Systems (20 credits) - Core</span>
<span class="mdltxt">Web-Based Programming (20 credits) - Core</span>
<span class="mdltxt">Systems Development (20 credits) - Core</span>
<span class="mdltxt">Computing Principles (20 credits) - Core</span>
<span class="mdltxt">Software Engineering 1 (20 credits) - Core</span>
<span class="mdltxt">Programming 2 (20 credits) - Core</span>
<span class="mdltxt">Architectures and Operating Systems (20 credits) - Core</span>
<span class="mdltxt">Data Structures and Algorithms (20 credits) - Core</span>
<span class="mdltxt">Year in Industry (80 credits) - Core</span>
<span class="mdltxt">Industrial Project Report (40 credits) - Core</span>