Python Селен отправить ключи быстрый путь - PullRequest
0 голосов
/ 21 апреля 2020

Я использую send.key, чтобы написать что-то в текстовом поле, но это очень медленно, что является альтернативой? я пытаюсь использовать driver.execute но сейчас работает, есть ли способ? как копировать вставить или что-то ....

message = "100000000000 words"



def Facebook():
    usr = ''
    pwd = ''

    driver.get('https://www.facebook.com/')

    username_box = driver.find_element_by_id('email')
    username_box.send_keys(usr)

    password_box = driver.find_element_by_id('pass')
    password_box.send_keys(pwd)

    login = driver.find_element_by_id('loginbutton')
    login.click()
    sleep(2)

    for i in group_list:
        driver.get(i)
        sleep(2)
        post_box = driver.find_element_by_xpath("//*[@name='xhpc_message_text']")
        sleep(5)
        post_box.send_keys(message)
        sleep(4)
        post_element = driver.find_element_by_xpath('./html/body/div[1]/div[3]/div[1]/div/div[2]/div[2]/div[2]/div[2]/div[3]/div[1]/div/div/div[2]/div[1]/div/div/div/div[2]/div/div[2]/div[3]/div/div[2]/div/div[2]/button')
        post_element.click()
        print('Sucsesfully posted')
        sleep(5)

Facebook()

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Да, вы можете использовать копирование и вставку:

import pyperclip
from selenium.webdriver.common.keys import Keys 

pyperclip.copy(message)
post_box.send_keys(Keys.CONTROL,'v')
0 голосов
/ 21 апреля 2020

Selenium sendKeys действительно довольно медленный. Альтернативой является установка текста с помощью Javascript. Я не использую python, но использую Java. У нас есть JavascriptExecutor, предоставленный в Selenium, который позволяет нам запускать Javascript. Вы действительно найдете разницу между sendKeys и javascript для установки текста, если у вас есть 1000 текстовых полей, которые вы хотите заполнить. Я попробовал это, создав страницу HTML с 1000 текстовыми полями. Запустил мой код, чтобы установить текст с помощью sendKeys, а затем снова с помощью javascript. Javascript был намного быстрее.

Код выглядит примерно так.

        JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
        jsExecutor.executeScript("arguments[0].value = MyText;", searchElement);

or

        JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
        jsExecutor.executeScript("arguments[0].setAttribute(value,MyText);", searchElement);


Иногда вместо атрибута значения может потребоваться установить innerText элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...