Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium自动填充问题_Python_Selenium_Selenium Webdriver_Bots_Autofill - Fatal编程技术网

Python Selenium自动填充问题

Python Selenium自动填充问题,python,selenium,selenium-webdriver,bots,autofill,Python,Selenium,Selenium Webdriver,Bots,Autofill,我正在尝试创建一个自动脚本bot,用于查找特定项目并将该项目添加到用户购物车等。现在我被抓到了,因为每当代码自动填充用户信息时,电话号码和信用卡号码要么倒排出来,要么混在一起 您使用的是哪种浏览器?您可以像这样禁用自动填充: ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-single-click-autofill"); options.addArguments("

我正在尝试创建一个自动脚本bot,用于查找特定项目并将该项目添加到用户购物车等。现在我被抓到了,因为每当代码自动填充用户信息时,电话号码和信用卡号码要么倒排出来,要么混在一起


您使用的是哪种浏览器?您可以像这样禁用自动填充:

    ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-single-click-autofill");
    options.addArguments("--disable-autofill-keyboard-accessory-view[8]");
    driver = new ChromeDriver(options);
或者尝试设置您自己的配置文件,并尝试在开始测试之前删除cookies! 以上内容摘自

如果上述内容还不够,您可以允许自动填充工作一次,然后快速删除所有自动填充条目。因此,请在键入之前调用清理:

browser.find_element_by_xpath('//*[@id="elementWhichWasAutoFilled"]/input').clear()

您可以尝试使用
JavaScript
设置每个输入字段的值:

Telephone = browser.find_element_by_id('order_tel')
Credit_number = browser.find_element_by_id('cnb')
browser.execute_script('arguments[0].value="3334449875";', Telephon)
browser.execute_script('arguments[0].value="1234569875884444";', Credit_number)

首先删除填充文本,然后发送密钥。为此使用ActionChain类。 请尝试以下示例:

from selenium.webdriver.common.action_chains import ActionChains

Telephone_field = browser.find_element_by_id('order_tel')

Creditcard_field = browser.find_element_by_id('cnb')

ActionChains(driver).move_to_element(Telephone_field).click().key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys("3334449875").perform()

ActionChains(driver).move_to_element(Creditcard_field).click().key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys("1234 5698 7588 4444").perform()

电话和抄送字段是否具有自动格式化功能?我猜是的,在过去selenium输入“太快”时,我遇到过这样的问题。尝试创建一个逐个字符键入字符并在每个字符之间等待的方法。这不是一个长期的解决方案,但可以帮助您进行调试。这不起作用。我目前正在上课,但这可能会起作用,因为我注意到它会自动填充我的城市,并一直想知道它是如何做到的,即使我在代码中留下了空白。我正在使用chrome@xris StoixeiaOk更新答案,您是否尝试删除[element.clear()]在打字之前?喂。一行或代码式答案不是回答问题的最佳方式。请添加一些解释,说明为什么您认为这是一个好的解决方案。我添加了评论。这很有效!。。你能给我解释一下为什么我以前用的是随机顺序给我数字,.keydown和.keydup是用来做什么的吗?keydown会按住一个键。在这里,我用它按住“控制”键,然后发送“a”键。它将选择输入的现有文本。然后,向上键将释放“控制”键。然后发送键将用给定的文本覆盖它。我注意到cc和phone number文本字段的文本框中已经有(_____-____;)。您可以在这些行的任意位置放置一个数字,在这种情况下python现在如何从左到右开始,因为它可以很好地处理街道地址和邮政编码
from selenium.webdriver.common.action_chains import ActionChains

Telephone_field = browser.find_element_by_id('order_tel')

Creditcard_field = browser.find_element_by_id('cnb')

ActionChains(driver).move_to_element(Telephone_field).click().key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys("3334449875").perform()

ActionChains(driver).move_to_element(Creditcard_field).click().key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).send_keys("1234 5698 7588 4444").perform()