读取数据类型为str的变量以将其发送到Selenium python中的.sendkeys

问题描述

我正在尝试从用户那里获取输入,对其进行加密并将其保存到txt文件/二进制文件中,然后将其读回并对其进行解密,并使用它填充.sendkeys(variable),但它似乎不起作用,我也尝试过在网上和其他帖子中搜索它,但对我没有用 我从用户输入的字符串是str 然后我写一个txt文件(在下面的示例中为二进制文件) 然后再读回去解密它,这里的数据类型是我假设是str

from selenium import webdriver
from msedge.selenium_tools import Edge
from cryptography.fernet import Fernet
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
        
def write_key():
    key = Fernet.generate_key()
    with open("key.key","wb") as key_file:
        key_file.write(key)

def load_key():
    return open("key.key","rb").read()
    
def encrypt_write(data,file):
    data = bytes(data,'utf-8')
    key = load_key()
    f = Fernet(key)
    encrypteddata = f.encrypt(data)
    f = open(file,"wb")
    f.write(encrypteddata)
    print(encrypteddata)
    f.close()
    
def read_decrypt(file):
    f = open(file,"rb")
    data = f.readline()
    f.close()
    key = load_key()
    f = Fernet(key)
    decrypted_encrypted = f.decrypt(data)
    decrypted_encrypted = str(decrypted_encrypted)[2:-1] 
    return decrypted_encrypted
    
email = input("email:")
write_key()
encrypt_write(email,'efile.bin')
remail = read_decrypt('efile.bin')
print(type(remail))
print(remail)
driver = Edge(executable_path='msedgedriver.exe')
driver.get('https://www.facebook.com/')
try:
        email = WebDriverWait(driver,3).until(EC.presence_of_element_located((By.NAME,'email')))
        print ("Page is ready!")
        email.send_keys(remail)
        print('Login sucessful')
except TimeoutException:
            print ("Error logining in")
            time.sleep(3)
            driver.quit()

在这里write_key()和load_key专用于使用cryptography加密数据.fernet crypto_write功能将数据加密并将其写入二进制文件,而read_decrypt功能读取二进制文件将其解密并返回字符串。 email是输入的电子邮件变量 remail是从二进制文件读取的电子邮件 “我还使用打印语句来获得更好的理解,并且我正在使用边缘浏览器”

我的输出是

email:user@xyz
b'gAAAAABfW8uWCwiCUyUMJAcYqmICv5cBAD9SmMGx6rSQMunwE12W9MKidKq8z2QsZx4yNIYM0jFW-kx3BcNe8KSRrHl_TU2_Yw=='
<class 'str'>
user@xyz
Page is ready!
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-46-79206622bda1> in <module>
     47         email = WebDriverWait(driver,'email')))
     48         print ("Page is ready!")
---> 49         email.send_keys(email)
     50         print('Login sucessful')
     51 except TimeoutException:

~\anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in send_keys(self,*value)
    476 
    477         self._execute(Command.SEND_KEYS_TO_ELEMENT,--> 478                       {'text': "".join(keys_to_typing(value)),479                        'value': keys_to_typing(value)})
    480 

~\anaconda3\lib\site-packages\selenium\webdriver\common\utils.py in keys_to_typing(value)
    148                 typing.append(val[i])
    149         else:
--> 150             for i in range(len(val)):
    151                 typing.append(val[i])
    152     return typing

我也尝试过email.send_keys(str(remail)) 这将填写输入框电子邮件为<selenium.webdriver.remote.webelement.WebElement (session="144eff9ac68a56f6b5a78b4b6ccde663",element="b2ed690c-0410-4838-a4ea-67edd3dfaf18")> 我也尝试过remail = str(remail) 什么都没做

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...