使用 selenium 中的 send_keys 发送超过 200000 个字符

问题描述 投票:0回答:2

我正在尝试从 Excel 工作表创建 HTML 表格并将其复制到网页。我正在使用 Send_Keys 向网页发送超过 200000 个字符(无关行),但它导致内存问题并使 jupyter 崩溃。我的代码如下。我正在寻找方法/替代方案来加快在网页上的代码中复制变量 x 的过程。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 30)

sheet_to_df_map = pd.read_excel(r'.xlsx', sheet_name='')

x = sheet_to_df_map.to_html()
x = str(x)

wait.until(EC.element_to_be_clickable((By.ID, "editPageLink"))).click()

wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID,"wysiwygTextarea_ifr")))

button1 = wait.until(EC.element_to_be_clickable((By.XPATH, "//body[@data-id='wysiwygTextarea']//p")))

button1.click()
button1.send_keys(x)
python pandas selenium xpath selenium-chromedriver
2个回答
0
投票

当我之前遇到这个问题时,我把字符串分成了几批。您可以按换行符之类的内容进行拆分,但如果您不知道每行有多长,则可以简单地按特定长度(字符数)进行拆分,但如果您有很多 unicode 等内容,则这可能不是最好的方法之一。判断什么最适合您。

interval = 1000 # No of characters
lines = [x[i:i+interval] for i in range(0, len(x), interval)]

for l in lines:
    button1.send_keys(l)

个人评论:但这不是一种节省时间的方法,因为它显着增加了输入所有内容所需的时间。我最终在做其他事情的同时使用多线程来完成这项工作。我确信其他人可能能够提出更好的解决方案,但这就是我所选择的。


0
投票

对于我的用例,我必须发送 >40 万个字符。将绳子分成几块对我来说不起作用。我能够使用 JavaScript:

@FindBy(name = "...")
private WebElement messageTxt;

public void setMessage(StringBuilder message) {
    messageTxt.clear();
    JavascriptExecutor jsDriver = (JavascriptExecutor) driver;
    jsDriver.executeScript("arguments[0].value=arguments[1];", messageTxt, message.toString());
}

上面是一个Java解决方案,但是这个概念在任何语言绑定中都应该是相同的。

© www.soinside.com 2019 - 2024. All rights reserved.