是这样的,我在拿食品药品安全的网站做练习,发现这个网站有这么一种情况.只要用selenium驱动chrome去做任何浏览器操作操作都无法获得数据
但是通过selenium打开网站后,如果手动点击操作是没有问题问题的.
我也尝试后,先通过selenium填入input数据,然后手动点击,但是仍然提示"服务器未返回数据".
from selenium import webdriver
import time
browser = webdriver.Chrome()
url = "http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=89&tableName=TABLE89&title=%CA%B3%C6%B7%CC%ED%BC%D3%BC%C1%C9%FA%B2%FA%D0%ED%BF%C9%BB%F1%D6%A4%C6%F3%D2%B5&bcId=137403916083811026153735196207"
browser.get(url)
browser.find_element_by_id("goInt").send_keys("4")
#单击搜索按钮
time.sleep(5)
browser.find_element_by_xpath('//*[@id="content"]/div/table[4]/tbody/tr/td[7]/input').click()
希望大家能点拨一下.
目测是一种基于js的反selenium手段, 你不能掉任何的browser.find_element。
例如:你调用browser.find_element_by_id("goInt"), 之后的所有请求返回值都是400。
以下是个人的理解:
selenium的find_element是向本地服务器(chromediver,解析html和js的)发送请求拿到数据,之前看过selenium的源码,在本地开了一个服务,通过网址可以直接访问。
提供一种其他的解决思路:
补充内容:
异步写法:
结果:
