войдите в систему продаж навигатор Python Selen - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь выполнить простую задачу входа на страницу навигатора продаж, после чего я могу попытаться удалить данные о потенциальных клиентах и ​​аккаунтах в качестве упражнения для очистки. Следуя этой ссылке для входа, у меня есть этот скрипт для выполнения задачи

    browser = webdriver.Firefox(executable_path=r'D:\geckodriver\geckodriver.exe')

    def login_linkedin(email_id,psswd):

        sales_url = "https://www.linkedin.com/sales/login"
        browser.get(sales_url)

        elem_username = browser.find_element_by_id("username")
        #elem_username = browser.find_element_by_name("session_key")
        elem_username.send_keys(email_id)
        elem_psswd = browser.find_element_by_id("password")
        #elem_psswd = browser.find_element_by_name("session_password")
        elem_psswd.send_keys(psswd)

        elem_signin = find_element_by_class_name("login__form_action_container ").click()

    if __name__ == "__main__":

        login_linkedin("la","la")

Проверяя каждый элемент в полях имени пользователя, пароля и кнопки входа (показано ниже), я пытался найти элемент по имени, имени класса и идентификатору, но всегда получал элемент , не найденный ошибка . Чего мне не хватать?

элемент username

  <input id="username" name="session_key" type="text" aria-describedby="error-for-username" required="" validation="email|tel" autofocus="" aria-label="Email or Phone">

элемент пароля

  <input id="password" type="password" aria-describedby="error-for-password" name="session_password" required="" validation="password" aria-label="Password">

Элемент кнопки входа

  <button class="btn__primary--large from__button--floating" type="submit" aria-label="Sign in">Sign in</button>

Ошибка

Traceback (most recent call last):
File "D:\Freelancing\Scrap_sales_nav\code\my_code\scrap_accounts.py", line 40, in <module>
login_linkedin("la","la")
File "D:\Freelancing\Scrap_sales_nav\code\my_code\scrap_accounts.py", line 21, in login_linkedin
elem_username = browser.find_element_by_id("username")
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_id
return self.find_element(by=By.ID, value=id_)
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="username"]

1 Ответ

2 голосов
/ 12 марта 2019

Проблема в том, что вы ищете в iFrame, поэтому нам нужно будет указывать селен на iframe вместо стандартной веб-страницы.К счастью, селен имеет функцию для этого: switch_to_frame()

Решение:

import time

browser = webdriver.Firefox(executable_path=r'D:\geckodriver\geckodriver.exe')

def login_linkedin(email_id, psswd):
        sales_url = "https://www.linkedin.com/sales/login"
        browser.get(sales_url)
        # sleeping to give the page time to load
        time.sleep(1)
        # the two lines below will put us into the iframe
        frame = browser.find_element_by_tag_name('iframe')
        browser.switch_to_frame(frame)
        # entering the username and password
        elem_username = browser.find_element_by_id("username")
        elem_username.send_keys(email_id)
        elem_psswd = browser.find_element_by_id("password")
        elem_psswd.send_keys(psswd)
        # no need for a variable name, we can just click
        browser.find_element_by_class_name("login__form_action_container ").click()

if __name__ == "__main__":
    login_linkedin('email_id', 'psswd')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...