Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.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
Selenium/Python如何在使用Selenium扩展文本后获得全文?_Python_Selenium Webdriver - Fatal编程技术网

Selenium/Python如何在使用Selenium扩展文本后获得全文?

Selenium/Python如何在使用Selenium扩展文本后获得全文?,python,selenium-webdriver,Python,Selenium Webdriver,我正在尝试从TripAdvisor中刮取评论,对于长评论,只显示需要单击“更多”才能显示完整评论的部分评论。我尝试在点击“更多”后获取文本(我可以看到文本已展开),但我得到的只是部分评论 我的代码(只需进行一次特定审查)如下所示: driver = webdriver.Firefox() driver.get(url) review = driver.find_element_by_id("review_541350982") review.find_element_by_class_name

我正在尝试从TripAdvisor中刮取评论,对于长评论,只显示需要单击“更多”才能显示完整评论的部分评论。我尝试在点击“更多”后获取文本(我可以看到文本已展开),但我得到的只是部分评论

我的代码(只需进行一次特定审查)如下所示:

driver = webdriver.Firefox()
driver.get(url)
review = driver.find_element_by_id("review_541350982") 
review.find_element_by_class_name("taLnk.ulBlueLinks").click()
driver.wait = WebDriverWait(driver, 5)
new_review = driver.find_element_by_id("review_541350982")
entry = new_review.find_element_by_class_name("partial_entry")
print entry.text
这是单击“更多”之前的HTML:

<p class="partial_entry">This place blah blah blah What an...
<span class="taLnk ulBlueLinks" onclick="widgetEvCall('handlers.clickExpand',event,this);">More</span>
</p>

这个地方什么都不是。。。 更多

这是下面的HTML:

<p class="partial_entry">This place blah blah blah What an incredible monument from both a historic and construction point of view.</p>
<span class="taLnk ulBlueLinks" onclick="widgetEvCall('handlers.clickCollapse',event,this);">Show less</span>

从历史和建筑的角度来看,这个地方是多么令人难以置信的纪念碑啊

少展示
我注意到现在
在单击“更多”之后出现在
之后。不确定这是否有用

非常感谢您的建议


编辑:注意到引入time.sleep(1)而不是driver.wait解决了问题。想知道是否有更好的方法来实现这一点,以便在新条目更改后自动获取,而不必设置任意的等待时间?

找到审查并单击“更多”:

review = driver.find_element_by_id("review_541350982")
partial_text = review.find_element_by_tag_name('p')
partial_text.find_element_by_tag_name('span').click()
使用XPath重新定位审阅并输出文本:

new_review = driver.find_element_by_xpath('(//*[@id="review_541350982"]//p)[1]')
print(new_review.text)

HTH

从您的代码中可以明显看出,
WebDriverWait
虽然已定义,但未正确使用。要打印全文,
从历史和建筑的角度来看,这个地方是一座多么令人难以置信的纪念碑。
,您可以使用以下代码块:

from selenium.webdriver.support import expected_conditions as EC
#code block
review = driver.find_element_by_id("review_541350982") 
review.find_element_by_class_name("taLnk.ulBlueLinks").click()
new_review = driver.find_element_by_id("review_541350982")
full_review = WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element(new_review.find_element_by_xpath("//p[@class='partial_entry']"),'This place blah blah blah What an incredible monument from both a historic and construction point of view.'))
entry = new_review.find_element_by_class_name("partial_entry")
print entry.text

单击“更多”后Xpath是否会更改?文本的Xpath不会更改。但是对于“更多”按钮(单击后变为“显示较少”)是的,从../div/p/span到../div/span,单击后使用xpath不起作用?它仍然返回部分审阅。我注意到包括时间。睡眠(1)解决了问题!但是有更好的方法吗?不幸的是,这仍然会返回部分审查。不确定为什么你的审查不起作用。可能是因为我用的是chrome驱动程序。尽管如此,我还是很高兴你能去上班