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
如何使用xpath/css选择器在Drupal8网站中单击动态链接,同时通过Selenium和Python实现自动化_Python_Selenium_Xpath_Css Selectors_Webdriverwait - Fatal编程技术网

如何使用xpath/css选择器在Drupal8网站中单击动态链接,同时通过Selenium和Python实现自动化

如何使用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。因此,需要构造一个动态定位器来定位元素 由

我试图点击一个编辑标签链接,它以一个无序列表中的超链接的形式出现

以下是HTML:

<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系统路径属性的静态部分,可以使用以下通配符:

  • $:指示属性值以结尾

  • ^:指示属性值以开头

因此,最细粒度的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;博士 您可以在以下内容中找到关于无接触异常的详细讨论:


根据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系统路径属性的静态部分,可以使用以下通配符:

  • $:指示属性值以结尾

  • ^:指示属性值以开头

因此,最细粒度的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用所有相关细节和参考资料更新答案,以加深您的理解。如果您有进一步的疑问,请告诉我。