Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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 找到含硒反应按钮的最佳方法?_Python_Reactjs_Selenium_Xpath - Fatal编程技术网

Python 找到含硒反应按钮的最佳方法?

Python 找到含硒反应按钮的最佳方法?,python,reactjs,selenium,xpath,Python,Reactjs,Selenium,Xpath,我有一个在OSX上与selenium配合良好的Python应用程序,我已经在Docker(Debian容器上的Python映像)中安装了这个应用程序。 当它在OSX上运行时,效果很好,但在debian上则不一样 这个Python脚本的目的是单击React按钮并解析HTTPPOST请求 此按钮的Xpath是 //*[@id='container']/main/div/div/div[1]/div[2]/form/div/div[2]/div[1]/button 这是此Url的“Recherche

我有一个在OSX上与selenium配合良好的Python应用程序,我已经在Docker(Debian容器上的Python映像)中安装了这个应用程序。 当它在OSX上运行时,效果很好,但在debian上则不一样

这个Python脚本的目的是单击React按钮并解析HTTPPOST请求

此按钮的Xpath是

//*[@id='container']/main/div/div/div[1]/div[2]/form/div/div[2]/div[1]/button
这是此Url的“Rechercher”按钮:

def headless(url):
url\u lbc=https://api.leboncoin.fr/finder/search'
对于范围(0,10)内的x:
http_tunnel_port,tor_进程,socks_port=tor_sub()
server=browsermob_server()
proxy\u b=browsermob\u代理(服务器、http\u隧道\u端口)
profile=profile\u firefox(代理服务器)
options=options\u firefox()
打印(‘测试初始化N°:’+str(x))
driver=webdriver.Firefox(可执行文件\u path='browserup/tools/geckodriverLinux',Firefox\u profile=profile,options=options)
proxy_b.new_har(“文件测试”,选项={'captureHeaders':True,'captureContent':True})
驱动程序。设置车窗位置(0,0)
驱动程序。设置窗口大小(randint(10242060),randint(10244100))
睡眠时间(randint(6,10))
获取驱动程序(url)
时间。睡眠(randint(2,3))
尝试:
如果driver.title==“您已被阻止”:
driver.save_屏幕截图(“文件名”+str(x)+“.png”)
印刷品(“禁令”)
firefox\u关闭(驱动程序、服务器)
其他:
driver.save_屏幕截图(“文件名”+str(x)+“.png”)
驱动程序。通过xpath(“//*[@id='container']/main/div/div/div[1]/div[2]/form/div/div[2]/div[1]/button”)查找元素。单击()
打印(“连接LBC”)
对于代理中的ent_b.har['log']['entries']:
如需在耳鼻喉科提出要求:
如果ent['request']['url']==url\u lbc和ent['request']['method']==POST':
header_raw=(ent['request']['headers'])
有效负载=(ent['request']['postData']['text'])
header={value['name']:header_raw}中的值的值['value']
打印(“测试编号:”+str(x)+“=>OK”)
返回收割台,有效载荷
时间。睡眠(1)
在OSX 8/10上,try是成功的,在Debian only 2/10上,我改进此脚本的第一个选项是找到等待react按钮并在加载DOM或按钮时单击它的最佳选项。
非常感谢您的帮助。

使用
WebDriverWait
等待按钮可单击,然后单击。对于按钮,您可以使用
//按钮[.='Rechercher']

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# ...

driver.get("https://www.leboncoin.fr/annonces/offres/lorraine/")
wait = WebDriverWait(driver, 5)
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[.='Rechercher']"))).click()

太好了,谢谢!