Невозможно открыть ссылку href в селене python - PullRequest
0 голосов
/ 16 марта 2020

У меня есть массив с именем account, который получает все необходимые мне href, затем я хочу открыть каждый из них, я попробовал следующий код

        accounts = self.driver.find_elements_by_xpath("//a[contains(@href, '/signin?')]")
        for account in accounts:
            self.driver.get(account)
            time.sleep(3)

, но возвращает

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: 'url' must be a string
  (Session info: chrome=80.0.3987.132)

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Вы выбираете список веб-элементов, поэтому вам нужно сначала извлечь атрибут href из этих веб-элементов, а затем нажать на них.
Вы можете сделать это следующим образом:

accounts = self.driver.find_elements_by_xpath("//a[contains(@href, '/signin?')]")
for account in accounts:
    self.driver.get(account.get_attribute("href"))
    time.sleep(3)
0 голосов
/ 16 марта 2020

Чтобы открыть href вместо WebElement , вам нужно вызвать get(), передав атрибут href , вызывающий WebDriverWait для visibility_of_all_elements_located(), и вы можете использовать любую из следующих Стратегий локатора :

  • Использование CSS_SELECTOR:

    accounts = [my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a[href*='/signin?']")))]
    for account in accounts:
        self.driver.get(account)
    
  • Использование XPATH:

    accounts = [my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//a[contains(@href, '/signin?')]")))]
    for account in accounts:
        self.driver.get(account)
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...