如何解决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&analytics_tier=undefined&r=us-east-1&game=0&language=de&d=1" target="_blank">Geräusch als Audio-Datei herunterladen</a>
在点击之前,我需要更改此代码:
de&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&analytics_tier=undefined&r=us-east-1&game=0&language=de&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&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&analytics_tier=undefined&r=us-east-1&game=0&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']"))))
参考文献
您可以在以下位置找到几个相关的详细讨论:
- Is there a way to add a new attribute with a value to an element using selenium python?
- Selenium Datepicker using JavascriptExecutor
如果您使用的是Python3 + Selenium
以下是步骤:
- 使用get_attribute()获取此Web元素的href
- 使用拆分或替换来复制链接
- 由于我们无法立即使用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 举报,一经查实,本站将立刻删除。