微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决读取数据类型为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 举报,一经查实,本站将立刻删除。