【问题标题】:error Element is not clickable at point (183, 798) web scraping python selenium错误元素在点 (183, 798) web 抓取 python selenium 处不可点击
【发布时间】:2020-07-24 19:07:15
【问题描述】:

我是使用 python 的新手,但遇到了问题。我正在尝试创建一个网络抓取循环以获取信息,但我的循环需要单击两次。 我正在使用的页面是:https://www.becual.com/oportunidades 对于每个反转机会,我需要单击然后获取信息“credito solicitado”和“empresa pagadora”。这是我用于循环的代码。

firmas = []
for i in range(0, size):
    detalles = browser.find_elements_by_xpath('//div[@class="col-xs-12 col-sm-3 col-md-3 imagen-oportunidad"]')
    detalles[i].click()
    time.sleep(3)
    monto = browser.find_element_by_css_selector('span:nth-last-child(3)').text
    garantia = browser.find_element_by_xpath('/html/body/app-root/div[2]/becual-opportunity-detail/div/div[2]/div/div[3]/div/div[1]/ul/li[3]/a')
    garantia.click()
    time.sleep(3)
    empresa = browser.find_element_by_xpath("/html/body/app-root/div[2]/becual-opportunity-detail/div/div[2]/div/div[3]/div/div[2]/div[3]/div/div[2]/div[2]/strong").text
    browser.back()
    time.sleep(10)
    firmas.append({'Monto': monto, 'Empresa': empresa})

我的循环一直工作到第 3 号。但它说它是不可点击的。 我只点击第三个元素,点击工作使用用 mi 循环代码编写的 xpath ('//div[@class="col-xs-12 col-sm-3 col-md-3 imagen-oportunidad"]') .我不明白为什么循环不起作用,但单独做却可以。

【问题讨论】:

    标签: python selenium loops web-scraping clickable


    【解决方案1】:

    您可以使用requests从外部API加载数据:

    import json
    import requests
    from bs4 import BeautifulSoup
    
    
    url = ' https://api.becual.com/api/oportunidad?incluirHistorico=false&page=1&limit=10000'
    data = requests.get(url).json()
    
    # uncomment to print all data:
    # print(json.dumps(data, indent=4))
    
    for data in data['data']:
        o = requests.get('https://api.becual.com/api/oportunidad/' + data['idOportunidad']).json()
        # uncomment to print all data about opportunity:
        # print(json.dumps(o, indent=4))
        nombre = o['garantias'][0]['nombreEmpresa'] if o['garantias'] else '-'
        print('{:<15} {:<15} {}'.format(o['idOportunidad'], o['montoCredito'], nombre))
    

    打印:

    CR1808213969    16000000        Altamira Chile
    CR1712292810    10400000        Jej Ingeniería
    CR1712202756    4800000         Soc. Agricola Requingua
    CR1712052601    15583739        Soc. Agricola Requingua
    CR1801042850    7200000         International Paper Cartones
    CR1809144426    707264          CONSTRUCTORA METROPOLITANA S.A.
    CR1710102345    3500000         Soc. Agricola Requingua
    CR1712262781    8700000         Compañía Industrial el Volcán
    CR1711072497    4200000         Viña Santa Ema
    CR1709272302    8100000         Soc. Agricola Requingua
    CR1712272789    10400000        Jej Ingeniería
    CR1802023015    11100000        SGS Chile
    CR1801182911    5500000         Soc. Agricola Requingua
    CR1711022486    6100000         International Paper Cartones
    CR1711102516    8723983         International Paper Cartones
    
    ...and so on.
    

    【讨论】:

      【解决方案2】:

      元素未在 DOM 中正确加载,并且未处于接受点击的状态。尝试下面的代码等待元素可点击

      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      
      element = WebDriverWait(driver, 30).until(
      EC.element_to_be_clickable((By.XPATH, '//div[@class="col-xs-12 col-sm-3 col-md-3 imagen-oportunidad"]')))
      
      element.click();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-17
        相关资源
        最近更新 更多