Python - So bearbeiten Sie das href-Attribut im Quellcode, bevor Sie auf Selenium klicken

Sep 15 2020

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&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>

Ich muss diesen Code ändern, bevor ich darauf klicke:

de&amp;d=1

zu

en

und

   target="_blank"

zu

target=""

Antworten

JeffC Sep 15 2020 at 11:55

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&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)
DebanjanB Sep 17 2020 at 18:50

Um den de&amp;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&amp;analytics_tier=undefined&amp;r=us-east-1&amp;game=0&amp;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&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']"))))
    

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