我有一个项目,我总是需要更改相同的值(去掉它们(:
<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=""
要将href属性的de&d=1
部分更改为en
,您需要诱导WebDriverWait等待visibility_of_element_located((,然后您可以使用以下定位器策略之一:
-
使用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','http:///www.website.com/get_audio/?session_token=6355f60252138cfd6.7872112701&analytics_tier=undefined&r=us-east-1&game=0&language=en')", 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=""
,您需要诱导WebDriverWait等待可见性_of_element_located((,您可以使用以下定位器策略之一:
-
使用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('target','')", element)
-
使用XPATH并在单行中:
browser.execute_script("arguments[0].setAttribute('target','')", WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[@name='audio-download' and text()='Geräusch als Audio-Datei herunterladen']"))))
参考
您可以在中找到一些相关的详细讨论
- 有没有一种方法可以使用selenium-python向元素添加一个带值的新属性
- 使用JavascriptExecutor的Selenium日期选择器
您可以在不将修改后的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)