Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium:如何设置基于DIV的编辑器的文本?_Python_Selenium_Selenium Webdriver - Fatal编程技术网

Python Selenium:如何设置基于DIV的编辑器的文本?

Python Selenium:如何设置基于DIV的编辑器的文本?,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我正在尝试通过Python Selenium发送Twitter DM。我可以选择并单击编辑器,但无法发送密钥。代码如下: import time from selenium import webdriver from selenium.common.exceptions import NoSuchElementException def is_dm_enabled(): driver.get('https://twitter.com/<TWITTER HANDLE YOU F

我正在尝试通过Python Selenium发送Twitter DM。我可以选择并单击编辑器,但无法发送密钥。代码如下:

import time

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException


def is_dm_enabled():
    driver.get('https://twitter.com/<TWITTER HANDLE YOU FOLLOW>')
    time.sleep(2)
    has_dm = False
    dm_elem = None

    try:
        dm_icon = driver.find_element_by_xpath(
            '//*[@id="react-root"]/div/div/div/main/div/div/div/div[1]/div/div[2]/div/div/div[1]/div/div[1]/div/div[2]')
        if dm_icon:
            has_dm = True
            dm_elem = dm_icon
    except NoSuchElementException:
        has_dm = False
        dm_elem = None
    finally:
        return has_dm, dm_elem


def login_twitter(user, pwd):
    USERNAME = user
    PASSWORD = pwd

    # navigate to the application home page
    driver.get("https://twitter.com/login")

    # get the username textbox
    login_field = driver.find_element_by_name("session[username_or_email]")
    login_field.clear()

    # enter username
    login_field.send_keys(USERNAME)
    time.sleep(1)

    # get the password textbox
    password_field = driver.find_element_by_name("session[password]")
    password_field.clear()

    # enter password
    password_field.send_keys(PASSWORD)
    time.sleep(1)
    password_field.submit()


if __name__ == '__main__':
    driver = webdriver.Firefox()
    driver.implicitly_wait(30)
    driver.maximize_window()

    login_twitter('<YOUR TWITTER USER>', '<YOUR TWITTER PASSWORD>')
    time.sleep(5)
    f, e = is_dm_enabled()
    if f:
        e.click()
        time.sleep(5)
        driver.find_element_by_class_name('DraftEditor-editorContainer').click()
        driver.execute_script("document.querySelector(\".DraftEditor-editorContainer span\").style.display = \"block\"")
        driver.execute_script("document.querySelector(\".DraftEditor-editorContainer span\").innerHTML = 'Take this'")
        # elems = driver.find_elements_by_css_selector('.DraftEditor-editorContainer')
        # print(len(elems))
DOM的屏幕截图如下所示:

import time

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException


def is_dm_enabled():
    driver.get('https://twitter.com/<TWITTER HANDLE YOU FOLLOW>')
    time.sleep(2)
    has_dm = False
    dm_elem = None

    try:
        dm_icon = driver.find_element_by_xpath(
            '//*[@id="react-root"]/div/div/div/main/div/div/div/div[1]/div/div[2]/div/div/div[1]/div/div[1]/div/div[2]')
        if dm_icon:
            has_dm = True
            dm_elem = dm_icon
    except NoSuchElementException:
        has_dm = False
        dm_elem = None
    finally:
        return has_dm, dm_elem


def login_twitter(user, pwd):
    USERNAME = user
    PASSWORD = pwd

    # navigate to the application home page
    driver.get("https://twitter.com/login")

    # get the username textbox
    login_field = driver.find_element_by_name("session[username_or_email]")
    login_field.clear()

    # enter username
    login_field.send_keys(USERNAME)
    time.sleep(1)

    # get the password textbox
    password_field = driver.find_element_by_name("session[password]")
    password_field.clear()

    # enter password
    password_field.send_keys(PASSWORD)
    time.sleep(1)
    password_field.submit()


if __name__ == '__main__':
    driver = webdriver.Firefox()
    driver.implicitly_wait(30)
    driver.maximize_window()

    login_twitter('<YOUR TWITTER USER>', '<YOUR TWITTER PASSWORD>')
    time.sleep(5)
    f, e = is_dm_enabled()
    if f:
        e.click()
        time.sleep(5)
        driver.find_element_by_class_name('DraftEditor-editorContainer').click()
        driver.execute_script("document.querySelector(\".DraftEditor-editorContainer span\").style.display = \"block\"")
        driver.execute_script("document.querySelector(\".DraftEditor-editorContainer span\").innerHTML = 'Take this'")
        # elems = driver.find_elements_by_css_selector('.DraftEditor-editorContainer')
        # print(len(elems))

尝试sendKeys方法,而不是执行JS在UI中键入

使用实际输入字段的XPATH://*[contains@class,“DraftStyleDefault']。因此,这将使您的代码类似于:

driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").click()
driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").clear()
driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").send_keys('Your Message here.')

尝试sendKeys方法,而不是执行JS在UI中键入

使用实际输入字段的XPATH://*[contains@class,“DraftStyleDefault']。因此,这将使您的代码类似于:

driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").click()
driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").clear()
driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").send_keys('Your Message here.')

我已经在Chrome上运行了这段代码,Naveen建议使用备选代码

driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").click()
driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").clear()
driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").send_keys('Your Message here.')
这对我来说很好,我怀疑你的浏览器版本和驱动程序版本可能不匹配。尝试下载支持浏览器的驱动程序。
我也有类似的问题,在过去,它是固定的,当我纠正我的驱动程序版本匹配浏览器

我已经在Chrome上运行了这段代码,使用Naveen建议的备选方案

driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").click()
driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").clear()
driver.find_element_by_xpath("//*[contains(@class, 'DraftStyleDefault')]").send_keys('Your Message here.')
这对我来说很好,我怀疑你的浏览器版本和驱动程序版本可能不匹配。尝试下载支持浏览器的驱动程序。
我也有类似的问题,在过去,它是固定的,当我纠正我的驱动程序版本匹配浏览器

哪一行代码,您面临这个问题?@Gokulnath在设置元素的innerHTML时。哪一行代码,您是否面临此问题?@Gokulnath在设置元素的innerHTML时。我尝试过发送_键-它给出的“键盘无法访问”检查此答案是否有用我尝试过发送_键-它给出的“键盘无法访问”检查此答案是否有用我用Chrome driverlatest而不是firefox尝试了您的代码。它给出了另一个错误selenium.common.exceptions.WebDriverException:消息:未知错误:无法聚焦元素。你用的是哪个网络驱动程序?我用的是Chrome,Chrome版本80.0.3987.132 ChromeDriver 80.0.3987.106。请根据你的chrome版本下载chrome驱动程序。终于成功了。但我很惊讶为什么它不适用于Firefox?我用Chrome driverlatest而不是Firefox尝试了你的代码。它给出了另一个错误selenium.common.exceptions.WebDriverException:消息:未知错误:无法聚焦元素。你用的是哪个网络驱动程序?我用的是Chrome,Chrome版本80.0.3987.132 ChromeDriver 80.0.3987.106。请根据你的chrome版本下载chrome驱动程序。终于成功了。但我很惊讶为什么它不适用于Firefox?