当我单击带有 selenium 的搜索按钮时,网站会重新加载

Posted

技术标签:

【中文标题】当我单击带有 selenium 的搜索按钮时,网站会重新加载【英文标题】:Website reloads when I click in the search button with selenium 【发布时间】:2020-05-13 04:48:11 【问题描述】:

我正在网站中进行自动搜索,但是当我单击按钮或提交表单时,网站会重新加载并删除我的过滤器。我认为问题出在网站的一项功能上。

这是网站:

http://www.tjpe.jus.br/consultajurisprudenciaweb/xhtml/consulta/consulta.xhtml

功能

function dpf(f) var adp = f.adp;if (adp != null) for (var i = 0;i < adp.length;i++) f.removeChild(adp[i]);;function apf(f, pvp) var adp = new Array();f.adp = adp;var i = 0;for (k in pvp) var p = document.createElement("input");p.type = "hidden";p.name = k;p.value = pvp[k];f.appendChild(p);adp[i++] = p;;function jsfcljs(f, pvp, t) apf(f, pvp);var ft = f.target;if (t) f.target = t;f.submit();f.target = ft;dpf(f);;

网站中有这样的“点击”:

onclick="if(typeof jsfcljs == 'function')jsfcljs(document.getElementById('formPesquisaJurisprudencia'),'formPesquisaJurisprudencia:j_id112':'formPesquisaJurisprudencia:j_id112','');return false"

我的 selenium 和 python 代码:

import time
import os
import seleniumrequests
from selenium import webdriver
from seleniumrequests import Chrome
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_experimental_option('prefs',  
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "plugins.always_open_pdf_externally": True
    
)

estado = str(input("Em qual estado você deseja fazer a busca?\n")) 

if (estado.upper() == 'PE'): #Mudar para "Case" quando houver outros estados
    med = str(input("Qual medicamento você deseja procurar?\n"))

    driver = webdriver.Chrome()

    driver.get('http://www.tjpe.jus.br/consultajurisprudenciaweb/xhtml/consulta/consulta.xhtml')

    driver.find_element_by_id('formPesquisaJurisprudencia:inputBuscaSimples').send_keys(med)

    driver.find_element_by_id('//*[@id="formPesquisaJurisprudencia"]/div[5]/div/a[1]').click()

    driver.find_element_by_xpath('//*[@id="resultadoForm:j_id20_body"]/div/table/tbody/tr[1]/td[2]/a').click()

    driver.find_element_by_name('j_id77:j_id80').click()

【问题讨论】:

这是网站行为。你的问题到底是什么? 我还是不明白问题出在哪里。删除的过滤器?只需重新填充即可。 问题是网站重新加载并停留在同一页面,不显示过滤器的结果。如果我手动执行此操作,它会起作用,但在 selenium 中则不会。 【参考方案1】:

尝试使用此xpath 来点击搜索按钮:

.//div[@class='botoes-consulta']/a/font/font[text()='Search ']

这也不是idits xpath

driver.find_element_by_id('//*[@id="formPesquisaJurisprudencia"]/div[5]/div/a[1]').click()

【讨论】:

谢谢,我在这里试过了,但没有用。我觉得和js函数有关系。【参考方案2】:

点击Pesquisar 链接诱导WebDriverWait()element_to_be_clickable 并遵循Xpath 选项。

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//a[@class='form-button first' and text()='Pesquisar']"))).click()

或跟随 css 选择器。

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.botoes-consulta >a.form-button.first"))).click()

【讨论】:

谢谢,我都试过了,但在这里不起作用。我觉得和js函数有关系。

以上是关于当我单击带有 selenium 的搜索按钮时,网站会重新加载的主要内容,如果未能解决你的问题,请参考以下文章

Selenium 等待 HTML 元素更改

搜索委托,当我点击搜索按钮时,它会显示带有错误子项的红屏! =空

Splinter 或 Selenium:我们可以在单击按钮后获取当前的 html 页面吗?

在 wordpress 网站中提交带有 paypal 按钮的表单数据

无法单击Selenium IDE中弹出窗口中的按钮

当我单击网页上的按钮时生成 .mobileconfig 文件