硒网上报废

时间:2020-07-09 15:16:37

标签: python selenium

我认为这类似于以下问题:Button not clickable in Selenium Chrome window

我需要自动搜索有关清单列表的信息。我正在尝试硒,但它无法单击按钮来执行搜索。也许这是网站的保护?

到目前为止,我的脚本是:

import time
import string
import itertools
from selenium import webdriver

chromedriver_location = "/home/dell/Downloads/chromedriver"

driver = webdriver.Chrome(chromedriver_location)
driver.get('https://www.idealista.com/valoraciones-inmuebles')

time.sleep(2)

test = '7559431DG0075N0001EY'
initial_button = '//*[@id="vendorlead"]/div[2]/a'
search_field = '//*[@id="search-by-reference"]'
valoration = '//*[@id="vendorlead"]/button'
driver.find_element_by_xpath(initial_button).click()
driver.find_element_by_xpath(search_field).send_keys(test)
driver.find_element_by_xpath(valoration).click()

当我手动或通过Selenium Chrome中的脚本单击按钮时,它将在控制台上显示以下错误: enter image description here

预先感谢

3 个答案:

答案 0 :(得分:1)

您被阻止了。 (做第三个答案,其他答案在自动化调试方法中非常有效)

运行测试,让它无法按下最后一个按钮-但不要关闭镶边。在该chromedriver实例中,选择右上角的语言选项,然后选择英语。

您将经历很多我不是机器人的验证码。完成所有步骤,直到您访问英语网站。 (您将无法使它们自动化-它们旨在停止自动化。)

关闭Chrome驱动程序。

按原样重新运行脚本。

...

以上内容对我有用。 我第一次运行以下内容,但由于您的错误而失败。我做到了以上几点,运行了相同的代码而没有进行更改,并且它起作用了。

import time
import string
import itertools
import selenium
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.idealista.com/valoraciones-inmuebles')

test = '7559431DG0075N0001EY'

#Objects
initial_button = '//*[@id="vendorlead"]/div[2]/a'
#search_field = '//*[@id="search-by-reference"]'
search_field ='//*[@id="vendorlead"]//input'
valoration = '//*[@id="vendorlead"]/button'

#Actions
time.sleep(5)
driver.find_element_by_xpath(initial_button).click()
time.sleep(5)
driver.find_element_by_xpath(search_field).send_keys(test)
time.sleep(5)
driver.find_element_by_xpath(valoration).click()
time.sleep(5)

...请不要使用该时间。在真实脚本中睡眠。我只需要排除同步问题。

python 3.8,chrome 83

答案 1 :(得分:0)

在发送键和点击搜索之间是否需要一些同步?

我快速浏览了该站点,并手动输入了测试数据 该网站运行一些脚本。 如果您尝试按无数据搜索,则不会发生任何事情。

尝试在发送键和单击之间设置time.sleep作为快速测试。 如果可行,请使用Web驱动程序等待进行动态同步。

答案 2 :(得分:0)

正如我对其他答案的评论中所述,我尝试了您的代码并获得了相同的结果。 我还尝试了c#,所以它不是硒绑定。

我尝试了一些手动操作,看起来根本的问题是sendkeys没有设置表单数据。

我找不到您拥有的对象-所以我只是使用devtools查找了一个新的对象,并且工作了。

如果您更改:

search_field = '//*[@id="search-by-reference"]'

成为:

search_field ='//*[@id="vendorlead"]//input'

在c#中对我有用。

我知道您正在使用python,但这是我在c#中所做的,以使其正常工作:

   [Test]
        public void stackoverflow()
        {

            var driver = new ChromeDriver();
            driver.Url = "https://www.idealista.com/valoraciones-inmuebles";
            driver.Manage().Window.Maximize();

            var test = "7559431DG0075N0001EY";
            string initial_button = "//*[@id='vendorlead']/div[2]/a";
            string search_field = "//*[@id='vendorlead']//input";
            string valoration = "//*[@id='vendorlead']/button";
            driver.FindElement(By.XPath(initial_button)).Click();
            driver.FindElement(By.XPath(search_field)).SendKeys(test);
           driver.FindElement(By.XPath(valoration)).Click();


        }