【问题标题】:How to find and click on a button with reference to parent using selenium?如何使用 selenium 查找并单击关于父级的按钮?
【发布时间】:2021-04-22 14:14:21
【问题描述】:

我想在 python 中使用 selenium 查找并单击一个按钮。我按照这个question 来检查那个按钮的元素,这导致我进入以下块:

<button type="button" class="btn btn-primary btn-block" data-bind="click:$parent.select"><!--mm text:$root.lang('searchSelect')-->Select<!--/mm-->

使用 Copy->copy 选择器复制它并将其粘贴到我的代码中后,我得到:

driver.find_element_by_css_selector('body > div.container-fluid > section:nth-child(7) > div:nth-child(2) > div:nth-child(12) > div:nth-child(4) > div > div > div.col-sm-3.text-center > button').click()

结果:没有错误,但没有点击按钮。我做错了什么?

PS To scrape 较早的代码中的结果我手动查看了 pagesource 并做了::

results = soup.select('.panel-body .col-xs-6 strong')[0].get_text()

【问题讨论】:

  • 你能提供你正在使用的网页的链接吗?

标签: python python-3.x selenium web-scraping beautifulsoup


【解决方案1】:

首先,不建议使用元素的绝对路径。您应该始终使用相对路径。两者都使用xpathcss selectors
我个人更喜欢使用xpath,如果元素的父元素可以用//tag[@attrubute='value']定位,而子元素是//child_tag[@child_att='val1'],那么相对于父元素的子元素将简单地通过//tag[@attrubute='value']//child_tag[@child_att='val1']定位

【讨论】:

  • 好的。我将研究xpath。谢谢。另外,我可以打开一个 chrome 窗口和同一个网站并找到单击按钮的结果吗?我的意思是我可以点击代码中的按钮,但是如何在实际的浏览器窗口中看到这个结果?
  • 我无法回答你,因为我不知道那个按钮是做什么的。如果您提供指向该网页的链接并提出更具体的问题会更好。
  • 好的。但是你能不能笼统地回答。如何根据您在 python 中使用 selenium 进行的操作(搜索、点击等)启动实际的 chrome 会话(来自 python)?
  • 很一般:​​打开浏览器,通过将URL传递给驱动程序来获取网页。然后等待所需元素的外观/可点击性/可见性,然后单击它或获取它的文本/任何其他属性。这与您使用的语言无关
  • 干杯,我已经这样做了。我的意思是如何在实际浏览器窗口中打开我的更改的图形结果?代码中的更改都很好,但我想通过打开一个实际的 chrome 窗口来继续,其中包含我在代码中所做的所需更改(搜索、点击)
【解决方案2】:

您可以通过 Xpath 进行搜索,只需检查 html 控件(您的按钮)并右键单击其 html 对象“Copy>Copy FullXpath”,然后在您的代码中:

control = diver.find_element_by_xpath("[XPATH]")
control.click()

这对我有用,这里和我自己的例子:

logging_button = browser.find_element_by_xpath('/html/body/div/div[2]/div[2]/div/div[2]/form/div[2]/div[1]')
logging_button.click()

【讨论】:

  • 谢谢。它有帮助
  • 欢迎您,您可以投票回答以帮助其他有同样问题的人。 :)
猜你喜欢
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2016-02-27
  • 1970-01-01
相关资源
最近更新 更多