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=""

要将href属性的de&amp;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&amp;analytics_tier=undefined&amp;r=us-east-1&amp;game=0&amp;language=en')", element)
    
  • 使用XPATH并在单行中:

    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')", 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&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)

最新更新