Ich versuche, Länder programmatisch in this Website für einige Automatisierung testen, sind die Preise in jedem Land anders, so dass ich ein kleines Werkzeug zu programmieren, um mir zu entscheiden, wo man kaufen.Selen Python Klicken Sie auf eine href durch Text innerhalb
Zuerst bekomme ich alle Währungen in eine Liste, indem Sie diese:
def get_all_countries():
one = WebDriverWait(driver1, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "selected-currency")))
one.click()
el = WebDriverWait(driver1, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "site-selector-list")))
list_return = []
a_tags = el.find_elements_by_tag_name('a')
for a in a_tags:
list_return.append(a.text)
return list_return
Zum Beispiel, gibt sie: ['United Kingdom', 'United States', 'France', 'Deutschland', 'España', 'Australia', 'Россия']
und dann, ich iterieren durch die Liste und jedes Mal, dem Aufruf dieser Funktion:
Beim Vergleich von a.text mit Text habe ich eine StaleElementReferenceException erhalten. Ich habe online gelesen, dass das Objekt geändert wurde, als ich es gespeichert habe, und eine einfache Lösung besteht darin, die Funktion erneut aufzurufen. Allerdings mag ich diese Lösung und diesen Code nicht sehr, ich denke, es ist nicht effektiv und braucht zu viel Zeit, irgendwelche Ideen?
EDIT:
def main(url):
driver1.get(url)
to_return_string = ''
one = WebDriverWait(driver1, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "selected-currency")))
one.click()
el = WebDriverWait(driver1, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "site-selector-list")))
a_tags = el.find_elements_by_tag_name('a')
for a in a_tags:
atext = a.text
ahref = a.get_attribute('href')
try:
is_change_currency_displayed = driver1.find_element_by_id("siteSelectorList").is_displayed()
if not is_change_currency_displayed: # get_all_countries function leaves dropdown open.
one = WebDriverWait(driver1, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "selected-currency")))
one.click()
driver1.get(ahref)
current_price = WebDriverWait(driver1, 10).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, ".current-price")))
to_return_string += ("In " + atext + " : " + current_price.text + ' \n')
print("In", atext, ":", current_price.text)
except TimeoutException:
print("In", atext, ":", "Timed out waiting for page to load")
to_return_string += ("In " + atext + " : " + " Timed out waiting for page to load" + ' \n')
return to_return_string
main('http://us.asos.com/asos//prd/7011279')
Sie ändern die Webseite jedes Mal, wenn Sie ** driver.get ** in ** wenn a.text = Text ** senden. Die ursprüngliche Seite geht verloren, sobald DOM aktualisiert wird. ** driver.get ** wird aufgerufen. –