Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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 2.7 如何从网页中删除隐藏文本?_Python 2.7_Selenium_Web Scraping_Lxml - Fatal编程技术网

Python 2.7 如何从网页中删除隐藏文本?

Python 2.7 如何从网页中删除隐藏文本?,python-2.7,selenium,web-scraping,lxml,Python 2.7,Selenium,Web Scraping,Lxml,我正试图从网页上抓取一些文字。在我的网页上有一个单词列表。当我点击“+更多”时,其中一些是可见的,另一些是可见的。单击后,单词列表始终相同(相同顺序相同单词)。但是,其中有些是粗体的,有些是删除的。所以基本上数据库的每一项都有一些特性。我想做的是:对于每个项目,告诉我哪些功能可用,哪些不可用。我的问题是克服“+更多”按钮 我的脚本只适用于那些显示的单词,而不适用于那些被“+更多”隐藏的单词。我想做的是收集节点“del”下面的所有单词。我最初认为,通过lxml,网页会像chrome inspect

我正试图从网页上抓取一些文字。在我的网页上有一个单词列表。当我点击“+更多”时,其中一些是可见的,另一些是可见的。单击后,单词列表始终相同(相同顺序相同单词)。但是,其中有些是粗体的,有些是删除的。所以基本上数据库的每一项都有一些特性。我想做的是:对于每个项目,告诉我哪些功能可用,哪些不可用。我的问题是克服“+更多”按钮


我的脚本只适用于那些显示的单词,而不适用于那些被“+更多”隐藏的单词。我想做的是收集节点“del”下面的所有单词。我最初认为,通过lxml,网页会像chrome inspect元素中显示的那样被加载,因此我编写了相应的代码:

from lxml import html

tree = html.fromstring(br.open(current_url).get_data())

mydata={}

if len(tree.xpath('//del[text()='some text']')) > 0:
    mydata['some text'] = 'text is deleted from the web page!'
else:
    mydata['some text'] = 'text is not deleted'
每次我运行这段代码时,我所能收集的实际上是网页上显示的数据的一部分,但不是单击“+更多”后显示的完整单词列表

我尝试过selenium,但据我所知,它不是用于解析,而是用于与网页交互。但是,如果我运行此命令:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.mywebpage.co.uk')

a = driver.find_element_by_xpath('//del[text()="some text"]')
我要么得到元素,要么得到错误。我希望得到一个空列表,以便我可以执行以下操作:

mydata = {}

if len(driver.find_element_by_xpath('//del[text()="some text"]')) > 0:
    mydata['some text'] = 'text is deleted from the web page!'
else:
    mydata['some text'] = 'text is not deleted'
或者找到另一种方法来获取脚本捕获的这些“隐藏”元素


我的问题是有人有过这种问题吗?他们是如何分类的?

如果我理解正确,您希望在列表中查找元素。但是,如果元素在页面上不可用,Selenium会抛出ElementNotFoundException,而不是返回列表

我的问题是你为什么想要一份清单?根据您的示例判断,您希望查看页面上是否存在元素。您可以通过使用try/except轻松实现这一点

from selenium.common.exceptions import TimeoutException

try:
    driver.find_element_by_xpath('//del[text()="some text"]')
    mydata['some text'] = 'text is deleted from the web page!'
except TimeOutException:
    mydata['some text'] = 'text is not deleted'
现在如果你真的需要这个列表,你可以在页面上搜索多个元素。这将返回列表中与定位器匹配的所有元素。 要执行此操作,请更换:

driver.find_element_by_xpath('//del[text()="some text"]')
使用(元素s):


嗨,雷姆科。谢谢你的回答。是的,在我的网页上有一个单词列表。当我点击“+更多”时,其中一些是可见的,另一些是可见的。单击后,单词列表始终相同(相同顺序相同单词)。但是,其中有些是粗体的,有些是删除的。所以基本上数据库的每一项都有一些特性。我想做的是:对于每个项目,告诉我哪些功能可用,哪些不可用。我的问题是克服“+More”按钮。我的脚本只适用于显示的单词,而不适用于“+More”隐藏的单词。我会试试你的代码,让你知道。我对selenium的担心是它看起来很慢……它只是打开了网页,没有在我的字典中保存任何数据;(你有没有可能给我看一下这个列表的HTML,或者创建一个类似的例子?@user0978189这是一个很烦人的页面。无论如何,我假设你想刮一下这些便利设施。你将无法读取所有隐藏的设施,因为它们还不在DOM中。这意味着你必须先获取“更多”按钮的名称,然后单击此按钮。之后可以查找隐藏的所有元素。
driver.find_elements_by_xpath('//del[text()="some text"]')