【问题标题】:How to send entire text into a text area using selenium in python instead of sending it line by line?如何在 python 中使用 selenium 将整个文本发送到文本区域而不是逐行发送?
【发布时间】:2018-11-13 17:33:13
【问题描述】:

我的代码将文本逐行输入到网页的文本区域,如何让它一次插入整个文本,有没有解决方案? 因为一行一行需要很多时间

def Translated_Content(content):

    driver= webdriver.Chrome("C:\\Users\\shricharan.arumugam\\Desktop\\PDF2txt\\chromedriver.exe")
    driver.get('https://translate.shell.com/')

    input_box = driver.find_element_by_id('translateText')
    input_box.send_keys(content)

    translate_button = driver.find_element_by_id('translate')
    translate_button.click()
    translated_text_element= driver.find_element_by_id('translatedText')
    time.sleep(4)


    translated_text=translated_text_element.get_attribute('value')

    driver.close()

    return translated_text

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver webdriver


    【解决方案1】:

    要通过 Python 使用 selenium 将整个文本块发送到 <textarea> 以加快进程,您可以注入脚本并使用以下解决方案:

    • 代码块:

      from selenium import webdriver
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      
      myText = """No, there is no way to hide the console window of the chromedriver.exe 
          in the .NET bindings without modifying the bindings source code. This is seen 
          as a feature of the bindings, as it makes it very easy to see when your code 
          hasn't correctly cleaned up the resources of the ChromeDriver, since the console window 
          remains open. In the case of some other languages, if your code does not properly clean up 
          the instance of ChromeDriver by calling the quit() method on the WebDriver object, 
          you can end up with a zombie chromedriver.exe process running on your machine.""" 
      options = webdriver.ChromeOptions() 
      options.add_argument("start-maximized")
      options.add_argument('disable-infobars')
      driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
      driver.get('https://translate.shell.com/')
      translate_from = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "textarea.form-control#translateText")))
      translate_from._parent.execute_script("""
          var elm = arguments[0], text = arguments[1];
          if (!('value' in elm))
            throw new Error('Expected an <input> or <textarea>');
          elm.focus();
          elm.value = text;
          elm.dispatchEvent(new Event('change'));
          """, translate_from, myText)
      driver.find_element_by_css_selector("input#translate").click()
      

    浏览器快照:

    【讨论】:

      【解决方案2】:

      您可以通过 JavaScript DOM API 以静默方式更改 textbox/textarea 的文本,而不是从前端 UI:

      long_string= <the long string>
      input_box = driver.find_element_by_id('translateText')
      driver.execute_script('arguments[0].value=arguments[1]', input_box, long_string)
      

      【讨论】:

      • 像魅力一样工作!比被选为最佳答案的代码要干净得多。
      • 我可以运行一个函数,其中有一个用于打印文本和数字的 for 循环。如何在 selenium 中运行 python 函数?
      • 我认为没有办法做到这一点。实际上execute_script(&lt;script&gt;)中的'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      相关资源
      最近更新 更多