Python - So bearbeiten Sie das href-Attribut im Quellcode, bevor Sie auf Selenium klicken
Ich habe ein Projekt, in dem ich immer die gleichen Werte ändern (ausschneiden) muss:
<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>
Ich muss diesen Code ändern, bevor ich darauf klicke:
de&d=1
zu
en
und
target="_blank"
zu
target=""
Antworten
Sie können dies tun, ohne die geänderte URL in das A-Tag auf der Seite einzufügen. Sie können einfach die URL abrufen, sie mit ändern urllib.parseund dann einfach zur geänderten URL navigieren. Im folgenden Code habe ich urllib.parsedie verschiedenen Teile der URL entpackt, die gewünschten Änderungen vorgenommen und dann die URL wieder zusammengesetzt.
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)
Um den de&d=1Teil des hrefAttributs zu ändern , während enSie WebDriverWait für das induzieren müssen, visibility_of_element_located()können Sie eine der folgenden Locator-Strategien verwenden :
Verwenden von
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)Verwenden
XPATHund in einer einzigen Zeile: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']"))))
Um das Attribut zu ändern, target="_blank"wenn target=""Sie WebDriverWait für das induzieren müssen, visibility_of_element_located()können Sie eine der folgenden Locator-Strategien verwenden :
Verwenden von
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)Verwenden
XPATHund in einer einzigen Zeile: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']"))))
Verweise
Einige relevante ausführliche Diskussionen finden Sie in:
- Gibt es eine Möglichkeit, einem Element mit Selenpython ein neues Attribut mit einem Wert hinzuzufügen?
- Selenium Datepicker mit JavascriptExecutor