如何使用xpath/css选择器在Drupal8网站中单击动态链接,同时通过Selenium和Python实现自动化
我试图点击一个编辑标签链接,它以一个无序列表中的超链接的形式出现 以下是HTML:如何使用xpath/css选择器在Drupal8网站中单击动态链接,同时通过Selenium和Python实现自动化,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我试图点击一个编辑标签链接,它以一个无序列表中的超链接的形式出现 以下是HTML: <li><a href="/node/2658/edit" data-drupal-link-system-path="node/2658/edit">Edit</a></li> 是否有selenium函数可用于转到此编辑页?根据您共享的HTML值href和数据drupal链接系统路径属性显然是动态的,因为存在值2658。因此,需要构造一个动态定位器来定位元素 由
<li><a href="/node/2658/edit" data-drupal-link-system-path="node/2658/edit">Edit</a></li>
是否有selenium函数可用于转到此编辑页?根据您共享的HTML值
href
和数据drupal链接系统路径
属性显然是动态的,因为存在值2658
。因此,需要构造一个动态定位器来定位元素
由于所需元素是一个动态元素,因此要在元素上定位并单击()
,您必须引导WebDriverWait使元素可单击()
,并且您可以使用以下任一选项:
- 使用
:CSS\u选择器
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "li>a[href$='edit'][data-drupal-link-system-path^='node']"))).click()
- 使用
:XPATH
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li/a[contains(@href, 'edit') and starts-with(@data-drupal-link-system-path, 'node')][text()='Edit']"))).click()
- 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
解释动态CSS_选择器 <> >仅考虑“代码> > HREF 和<代码>数据Drupal Link系统路径属性的静态部分,可以使用以下通配符:
- $:指示属性值以结尾
- ^:指示属性值以开头
li>a[href$='edit'][data-drupal-link-system-path^='node']
//li/a[contains(@href, 'edit') and starts-with(@data-drupal-link-system-path, 'node')][text()='Edit']
动态XPATH的解释
只考虑静态部分的代码> HREF 和<代码>数据Drupal链接系统路径< /C>属性,您可以使用以下函数:
:指示属性值包含contains()
:指示属性值以开头starts-with()
li>a[href$='edit'][data-drupal-link-system-path^='node']
//li/a[contains(@href, 'edit') and starts-with(@data-drupal-link-system-path, 'node')][text()='Edit']
参考文献 您可以在以下内容中找到一些相关讨论:
tl;博士 您可以在以下内容中找到关于无接触异常的详细讨论:
href
和数据drupal链接系统路径的值显然是动态的,因为存在值2658
。因此,需要构造一个动态定位器来定位元素
由于所需元素是一个动态元素,因此要在元素上定位并单击()
,您必须引导WebDriverWait使元素可单击()
,并且您可以使用以下任一选项:
- 使用
CSS\u选择器
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "li>a[href$='edit'][data-drupal-link-system-path^='node']"))).click()
- 使用
XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li/a[contains(@href, 'edit') and starts-with(@data-drupal-link-system-path, 'node')][text()='Edit']"))).click()
- 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
解释动态CSS_选择器
<> >仅考虑“代码> > HREF 和<代码>数据Drupal Link系统路径属性的静态部分,可以使用以下通配符:
- $:指示属性值以结尾
- ^:指示属性值以开头
因此,最细粒度的css_选择器应该是:
li>a[href$='edit'][data-drupal-link-system-path^='node']
//li/a[contains(@href, 'edit') and starts-with(@data-drupal-link-system-path, 'node')][text()='Edit']
动态XPATH的解释
只考虑静态部分的代码> HREF 和<代码>数据Drupal链接系统路径< /C>属性,您可以使用以下函数:
contains()
:指示属性值包含
starts-with()
:指示属性值以开头
因此,最细粒度的xpath应该是:
li>a[href$='edit'][data-drupal-link-system-path^='node']
//li/a[contains(@href, 'edit') and starts-with(@data-drupal-link-system-path, 'node')][text()='Edit']
参考文献
您可以在以下内容中找到一些相关讨论:
tl;博士
您可以在以下内容中找到关于无接触异常的详细讨论:
@KunduK您能详细介绍一下吗?不熟悉你所说的我希望我能,但是需要登录到我们网站的开发模式,很遗憾,我无法共享这些信息……不用担心。如果检查元素,编辑元素只需在DOM树中向上遍历,并检查是否有任何标记
,如果需要切换到该iframe才能访问。查看整个页面源代码,任何地方都没有实例。好。。。有两个,但在任何相关部分中都没有,它们始终在同一行中关闭。iframe标记始终是start和close。但是,请检查@DebanjanB发布的答案,希望这将有助于您的解决方案。@KunduK您能进一步说明吗?不熟悉你所说的我希望我能,但是需要登录到我们网站的开发模式,很遗憾,我无法共享这些信息……不用担心。如果检查元素,编辑元素只需在DOM树中向上遍历,并检查是否有任何标记
,如果需要切换到该iframe才能访问。查看整个页面源代码,任何地方都没有实例。好。。。有两个,但在任何相关部分中都没有,它们始终在同一行中关闭。iframe标记始终是start和close。不过,请查看@DebanjanB发布的答案,希望这将有助于您的解决方案。先生,您是一位救生员。CSS选项工作得非常好。你能解释一下你是怎么这么快得出这个结论的吗?我想更深入地了解一下level@MichaelLively用所有相关细节和参考资料更新答案,以加深您的理解。如果您有任何疑问,请告诉我。先生,您是一位救生员。CSS选项工作得非常好。你能解释一下你是怎么这么快得出这个结论的吗?我想更深入地了解一下level@MichaelLively用所有相关细节和参考资料更新答案,以加深您的理解。如果您有进一步的疑问,请告诉我。