使用Python在Selenium中使用Send_keys()从数据帧发送值

使用Python在Selenium中使用Send_keys()从数据帧发送值,python,python-3.x,selenium,selenium-webdriver,Python,Python 3.x,Selenium,Selenium Webdriver,我有一个数据帧df。我正在尝试使用Selenium和python中的send_keys()方法将列'fruit'中的值发送到google translate页面。下面是一个示例代码,它复制了我正在尝试的操作 from selenium import webdriver from selenium.webdriver.common.keys import Keys import pandas as pd # Create a test dataframe fruit = ['This is ap

我有一个数据帧df。我正在尝试使用Selenium和python中的
send_keys()
方法将列'fruit'中的值发送到google translate页面。下面是一个示例代码,它复制了我正在尝试的操作

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd

# Create a test dataframe
fruit = ['This is apple', 'This is orange', 'This is mango']
bucket = ['A', 'B', 'C']
df = pd.DataFrame({"fruit": fruit, "bucket": bucket})

# create a new Firefox session
driver = webdriver.Firefox()

# Wait for the page to load
driver.implicitly_wait(5)

# Maximize the browser window
driver.maximize_window()

# navigate to the home page
driver.get("https://translate.google.co.in/")

# Locate the text field to update values
text_field = driver.find_element_by_name("text")

# Clears any value already present in text field
text_field.clear()

# Updates the string 'Breaking Bad' in search bar
text_field.send_keys(df['fruit'])
text_field.send_keys(Keys.ENTER)
虽然它可以工作,但所有行都作为一行发送,如下所示:

This is appleThis is orangeThis is mango
This is apple
This is orange
This is mango
我希望这些值显示在google translate页面中,如下所示:

This is appleThis is orangeThis is mango
This is apple
This is orange
This is mango

对于如何实现这一目标的任何帮助,我们都将不胜感激。我有Python 3.6.6,我的selenium版本是3.141.0。我的操作系统是Windows 10(64位)。

您可以尝试将连接的字符串作为

text_field.send_keys(" ".join(df['fruit']))
或使用新行字符:

text_field.send_keys("\n".join(df['fruit']))
另外,除了使用Selenium翻译字符串,您还可以使用:

在终端/命令行中:

pip install git+https://github.com/BoseCorp/py-googletrans.git
在Python shell/IDE中:

from googletrans import Translator

translator = Translator()
#  Translate into "es" (Spanish)
print(translator.translate(" ".join(df['fruit']), dest='es').text)

当您告诉它发送
df['fruit']
时,它会立即发送整个列。您可以改为在列中循环,发送每个列,后跟一个换行符“\n”,然后发送ENTER有没有办法告诉selenium webdriver“\n”表示新行?有没有什么方法可以在send_keys()发送每一行之后添加一个
'Control'+'Shift'
命令,使行保持分开?我仍在学习,所以如果这些问题听起来很奇怪,请原谅我。我曾试图寻找答案,但徒劳无功。这就是为什么作为最后手段,我将其发布在这里,以便专家们能够指导我。Selenium已经“知道”了
'\n'
是一个新行字符,因此如果要使用code
send\u键('foo\nbar')
字符串将出现在文本区域中,分成两个子字符串
'\n'
是一个新行字符,至少在大多数字符编码中是这样的,应该这样读。永远不要因为提出诚实的问题而道歉,这就是这个网站存在的原因,也是你学习的方式。仅供参考<代码>驱动程序。隐式等待(5)实际上并不等待页面加载。它的作用是设置隐式等待的默认等待时间,该等待持续
驱动程序的生命周期。因此,从那时起,无论何时访问页面上的某个元素,该元素都将等待5秒。有关更多信息,请参阅。使用隐式等待不是一个好的实践。如果你看看硒的贡献者,他们建议不要这样做。您应该改用
WebDriverWait
。我使用了您提供的解决方案
text\u字段。send\u key(“\n”).join(df['fruit'))
,它工作得非常好。非常感谢你帮了我的忙!!那个谷歌翻译页面只是为了突出我的问题,并不是真的为了任何翻译@Code_Sipra,哦,我明白了:)但如果将来你需要翻译,请注意googletrans.py工作完美:)注意。再次感谢!