微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python-如何在使用Selenium单击之前在源代码中编辑href属性

如何解决Python-如何在使用Selenium单击之前在源代码中编辑href属性

我有一个项目,在这里我总是需要更改相同的值(切掉它们):

<a class="sc-chPdSV iZXvhe sc-htpNat gEZjyJ" type="submit" name="audio-download" href="http:///www.website.com/get_audio/?session_token=6355f60252138cfd6.7872112701&amp;analytics_tier=undefined&amp;r=us-east-1&amp;game=0&amp;language=de&amp;d=1" target="_blank">Geräusch als Audio-Datei herunterladen</a>

在点击之前,我需要更改此代码

de&amp;d=1

en

   target="_blank"

target=""

解决方法

您可以执行此操作,而无需将修改后的URL插入页面的A标签中。您可以获取URL,使用urllib.parse对其进行修改,然后导航至修改后的URL。在下面的代码中,我使用urllib.parse来解压缩URL的各个部分,进行所需的更改,然后重新组合URL。

from urllib.parse import urlparse,parse_qs,urlencode,urlunparse

old_url = 'http:///www.website.com/get_audio/?session_token=6355f60252138cfd6.7872112701&amp;analytics_tier=undefined&amp;r=us-east-1&amp;game=0&amp;language=de&amp;d=1'
o = list(urlparse(old_url))
q = parse_qs(o[4])
q['language'] = 'en'
del(q['d'])
o[4] = urlencode(q,doseq=True)
new_url = urlunparse(o)
print(new_url)
driver.get(new_url)
,

要将de&amp;d=1属性的href部分更改为en,您需要为visibility_of_element_located()引入WebDriverWait,并且可以使用以下任一方法Locator Strategies

  • 使用CSS_SELECTOR

    element = WebDriverWait(browser,20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"a[href^='http:///www.website.com/get_audio'][name='audio-download']")))
    browser.execute_script("arguments[0].setAttribute('href','http:///www.website.com/get_audio/?session_token=6355f60252138cfd6.7872112701&amp;analytics_tier=undefined&amp;r=us-east-1&amp;game=0&amp;language=en')",element)
    
  • 使用XPATH并一行:

    browser.execute_script("arguments[0].setAttribute('href',WebDriverWait(browser,20).until(EC.visibility_of_element_located((By.XPATH,"//a[@name='audio-download' and text()='Geräusch als Audio-Datei herunterladen']"))))
    

要将属性target="_blank"更改为target="",您需要为visibility_of_element_located()引入WebDriverWait,并且可以使用以下任一Locator Strategies:>

  • 使用CSS_SELECTOR

    element = WebDriverWait(browser,"a[href^='http:///www.website.com/get_audio'][name='audio-download']")))
    browser.execute_script("arguments[0].setAttribute('target','')",element)
    
  • 使用XPATH并一行:

    browser.execute_script("arguments[0].setAttribute('target',"//a[@name='audio-download' and text()='Geräusch als Audio-Datei herunterladen']"))))
    

参考文献

您可以在以下位置找到几个相关的详细讨论:

,

如果您使用的是Python3 + Selenium

以下是步骤:

  1. 使用get_attribute()获取此Web元素的href
  2. 使用拆分或替换来复制链接
  3. 由于我们无法立即使用JS函数 setAttribute ,请尝试 execute_script()更改href的Web元素值,然后单击。

检查功能说明https://selenium-python.readthedocs.io/api.html?highlight=execute_script

这个想法是用新的URL值设置元素作为args输入,并通过编写带有 setAttribute 的js函数来执行点击,如下所示:

execute_script("arguments[0].setAttribute('href','{new URL}').click()",target_element);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。