【问题标题】:How can I get the text from a dialogue using selenium-python?如何使用 selenium-python 从对话中获取文本?
【发布时间】:2016-06-30 07:56:14
【问题描述】:

我想在弹出窗口中抓取对话文本。问题是,在我触发链接后,会出现窗口,但似乎 selenium 驱动程序无法自动处理它,因为我通过输入 driver.window_handles 从本网站上的其他问题中了解到。 触发源:

len(driver.window_handles)的值是1。我以为我可以通过get_attributes获取窗口元素,然后通过get_attributes获取文本,幸运的是我成功通过了

wd = driver.find_element_by_css_selector('div[node-type="repeat_list"]')

selenium.webdriver.remote.webelement.WebElement (session="f810cbbe-db43-4e8d-b484-664559ec8efc", element="{dd00e689-7991-44e9-85d3-76c69e79218f}")

但可悲的是我不知道如何从中取出所有东西,因为我不知道它们的属性。

我不确定这是不是对话,一位前端工程师告诉我,它看起来像动画。无论如何,这是源 sn-p:

PS:浏览器是Firefox。

我认为抓取可能违反了网站的可接受使用政策,那么我应该隐藏一些信息。对不起。

【问题讨论】:

  • 您能分享一下您正在使用的HTML 吗?
  • 是弹出窗口还是新窗口
  • @sai 弹出窗口,我想。但是我已经从元素wd 的子元素中获取了对话文本,我想知道如何处理弹出对话窗口以优化我现有的解决方案。
  • 请将 HTML 以文本而非图片的形式发布。强烈建议不要将代码作为图片发布。

标签: python selenium selenium-webdriver dialog


【解决方案1】:

一旦你有了你的父元素:

wd = driver.find_element_by_css_selector('div[node-type="repeat_list"]')

你可以继续调用这个对象的方法,并以此顺序到达子元素,你可以使用findelement_by_xpath,或者find element_by_class name,例如:

wd = driver.find_element_by_css_selector('div[node-type="repeat_list"]')
wd.find_element_by_class_name("list_box").find_element_by_class_name("list_ul").find_elements_by_class_name("list_li S_line1 clearfix") 

以此类推,直到您到达层次结构中的所需元素并根据需要提取其内容。

我希望这会有所帮助!

【讨论】:

  • 你是对的,但我认为对话窗口可能有一个方法。
  • selenium 中没有这种方法。正如你上面提到的 len(driver.window.handles) 是 1 因此对话框窗口被认为是驱动程序关注的当前 HTML 页面的一部分,在 selenium 中有处理警报的方法,但只是因为警报是一种由浏览器触发的特殊事件,一旦对话框是 HTML 层次结构的一部分,您必须将其视为 HTML 层次结构的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2014-01-26
  • 2023-03-30
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多