通过链接文本去找 2、find_element_by_id 通过id去找 3、find_element_by_class_name 4、find_element_by_partial_link_text...5、find_element_by_name 6、find_element_by_css_selector 7、find_element_by_tag_name ''' # 获取驱动对象...、 driver = webdriver.Chrome() try: # 往百度发送请求 driver.get('https://www.baidu.com/') driver.implicitly_wait...再看一点requests请求库能不能执行js?是不是不能呀!那么如果你的网站需要发送ajax请求,异步获取数据渲染到页面上,是不是就需要使用js发送请求了。那浏览器的特点是什么?...(2)缺点 使用selenium本质上是驱动浏览器对目标站点发送请求,那浏览器在访问目标站点的时候,是不是都需要把静态资源都加载完毕。html、css、js这些文件是不是都要等待它加载完成。
print driver.page_source # 获取当前页面Cookie print driver.get_cookies() # ctrl+a 全选输入框内容 driver.find_element_by_id...="user-name" id="passwd-id" /> 寻找方法 # 获取id标签值 element = driver.find_element_by_id("passwd-id") # 获取name...标签值 element = driver.find_element_by_name("user-name") # 获取标签名值 element = driver.find_elements_by_tag_name...find_element_by_id find_elements_by_name find_elements_by_xpath find_elements_by_link_text find_elements_by_partial_link_text...find_elements_by_tag_name find_elements_by_class_name find_elements_by_css_selector 3.鼠标动作 #!
user.setPassword("111111111"); return user; } # 注意 @ResponseBody 标注该返回值为字符串而不是视图名称...获取请求参数 ① 简单数据类型 @RequestMapping(value = "/find") @ResponseBody public void find(String username..., int id){ System.out.println(username + "---" + id) } # 注意 - 形参名称与前台出入参数名称一致时会自动封装...(get没有请求体) - @ResponseBody注解 可以将方法返回的对象转化为json格式数据响应给客户端 * 响应时: 对象转json ⑥ @RequestParam...获取请求头信息 ① @RequestHeader - value:请求头的名称 - required:是否必须携带此请求头 @RequestMapping("/find")
图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。...- 如何实现懒加载数据技术: -- 在网页源码中,在img标签中首先会使用一个‘伪属性’(通常是src2,original等)去存放真正的图片链接,而不是直接存放在src属性中。...() 2 find_element_by_name() 3 find_element_by_class_name() 4 find_element_by_tag_name() 5 find_element_by_link_text...(),需要传入两个参数:查找方式By和值.实际上,它就是find_element_by_id()这种方法的通用函数版本,比如find_element_by_id(id)就等价于find_element(...type_name=%E6%81%90%E6%80%96&type=20&interval_id=100:90&action=' 7 # 发起请求前,可以让url表示的页面动态加载出更多的数据
((By.ID,'4'))) #等待百度页面 ID='4'的标签完毕,最大等待10秒 ''' 请求相关: browser.get('url') 响应相关: print...(By.ID,'kw').send_keys("美女") browser.find_element_by_id('kw').send_keys('性感') 2.通过标签name属性进行定位 browser.find_element_by_name...有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link browser.find_element_by_link_text("新闻").click() 7.通过搜索 页面中 链接进行定位...# browser.find_element_by_id('kw').send_keys('性感') #通过标签name属性进行定位 # browser.find_element_by_name...# browser.find_element_by_tag_name("input").send_keys("selenium") # browser.find_element(By.TAG_NAME
find_element_by_tag_name find_element_by_class_name find_element_by_css_selector 变式: find_element...(By.a,b)——参数a输入属性,参数b输入值 find_element_by_id(id) == find_element(By.ID, id) 2:多个节点(淘宝左边所有的导航栏条目):...find_elements_by_id find_elements_by_name find_elements_by_xpath find_elements_by_link_text find_elements_by_partial_link_text...find_elements_by_tag_name find_elements_by_class_name find_elements_by_css_selector 节点交互(模拟人的操作—有特定对象...,通过桥(代理服务器)发送请求 web代理 通过桥 返回 响应 请求库的代理设置方法 1:requests 的代理设置:只需要构造代理字典,然后通过 proxies 数即可,而不需要重新构建 pener
() #点击 wait.until(EC.presence_of_element_located((By.ID,'4'))) #等待百度页面 ID='4'的标签完毕,最大等待10秒 ''' 请求相关:...模拟浏览器无非请求---->显示页面----->寻找标签 ------>点击标签的事件,所以selenium的关键是怎么找到页面中的标签,进而触发标签事件; 1.通过标签id属性进行定位 browser.find_element...(By.ID,'kw').send_keys("美女") browser.find_element_by_id('kw').send_keys('性感') 2.通过标签name属性进行定位 browser.find_element_by_name...有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link browser.find_element_by_link_text("新闻").click() 7.通过搜索 页面中 链接进行定位...") # 2.有name,并且唯一,直接写name driver.switch_to_frame("xxxx") driver.switch_to.frame("xxxx") # 3.无id,无name
(self, by=By.ID, value=None) find_element_by_class_name(self, name) find_element_by_css_selector(self..., css_selector) find_element_by_id(self, id_) find_element_by_link_text(self, link_text) find_element_by_name...在使用浏览器请求数据时,用find_element_by_name、find_element_by_class_name、find_element_by_id、find_element_by_tag_name...从上图中可以看出文本框里有class,name,id属性,可以使用find_element_by_class_name、find_element_by_id、find_element_by_name来定位...从上图中看出,submit按键有id,class属性,可以用find_element_by_class_name和find_element_by_id来定位,执行命令: submitElement =
# 请求URLdriver.get("https://m.weibo.cn/") # 点击登录driver.find_element_by_class_name("lite-sign-in").click...() # 点击账号密码登录driver.find_element_by_class_name("b-left").click() # 账号driver.find_element_by_id("loginName...").send_keys("用户名") # 输入密码driver.find_element_by_id("loginPassword").send_keys("密码")# 点击登录driver.find_element_by_id...URLdriver.get("https://m.weibo.cn/") # 点击登录driver.find_element_by_class_name("lite-sign-in").click()...# 点击账号密码登录driver.find_element_by_class_name("b-left").click() # 账号driver.find_element_by_id("loginName
id="link1">Elsie] res = soup.find_all(href=re.compile('elsie')) # 指定多个属性查找 res = soup.find_all(id...=False res = soup.find_all('title', recursive=False) # find_all() 方法的返回结果是值包含一个元素的列表 # 而find()方法直接返回第一个结果...find_element_by_id find_element_by_xpath 查找多个元素 find_elements_by_xpath find_elements_by_name # 通过xpath...('//div[@id="find-step3-phone"]').get_attribute('style') driver.find_element_by_xpath('//*[@id="imgVerifyCodeP...xpath解析 // :从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
我们知道很多时候爬虫也不是万能的,这个时候就需要我们的自动化测试框架了。...快速入门 from selenium import webdriver # 实例化浏览器 driver = webdriver.Chrome() # 发送请求 driver.get('https:/...:根据id来查找某个元素 submitTag = driver.find_element_by_id('su') submitTag1 = driver.find_element(By.ID,'su')...= driver.find_element(By.CLASS_NAME,'su') find_element_by_name:根据name属性的值来查找元素 submitTag = driver.find_element_by_name...发送请求 c.get('https://www.baidu.com') 1、获取本页面URL c.current_url 2、获取日志 c.log_types #获取当前日志类型 c.get_log
scrapy_selenium的主要特点有: 它提供了一个SeleniumRequest类,可以让我们在scrapy中发送selenium请求,而不是普通的HTTP请求。...它提供了一个SeleniumMiddleware类,可以让我们在scrapy中处理selenium响应,而不是普通的HTML响应。...它提供了一个SeleniumSpider类,可以让我们在scrapy中使用selenium来编写爬虫逻辑,而不是普通的scrapy.Spider类。...('//div[@id="data"]') # 通过xpath定位数据元素 print(data.text) # 打印数据内容 def get_proxy(self):...('//div[@id="info"]') # 通过xpath定位数据元素 item['rating'] = data.find_element_by_xpath('.
/test.html","wb") #保存在本地 >>> f.write(res.read()) >>> f.close() 实现POST请求: 上述的例子是通过请求百度的get请求获得百度,...,而不是让程序一直在等待结果. import urllib.request response = urllib.request.urlopen('http://www.baidu.com', timeout...(bs.find_all('a',id='blog_nav_admin',class_='menu')[0]['href']) print(bs.find_all('a',id='blog_nav_admin...标签查找定位方式 print(driver.find_element_by_id("user")) # 通过ID来查找元素 print(driver.find_element_by_name...']/p//input[@id='pass']").send_keys("123123") # 提交这个请求,默认有两种提交方式一种是 click() 一种是submit() driver.find_element_by_xpath
请求 最基本的GET请求可以直接用get方法 1 requests.get("https://movie.douban.com/cinema/nowplaying/beijing/") 如果想要加参数...a=1&b=2 如果想请求JSON文件,可以利用 json() 方法解析 response=requests.get("https://github.com/timeline.json") print...如果你传递一个 string 而不是一个 dict,那么数据会被直接发布出去。...我们来仔细看一下 find_all() 的参数. name 参数 name 参数可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉....>The Dormouse's story 唯一的区别是 find_all() 方法的返回结果是值包含一个元素的列表,而 find() 方法直接返回结果. find_all() 方法没有找到目标是返回空列表
定位 driver.find_element_by_id("id") 我们打开百度页面,可以发现该输入框的 id 是 kw, 在清楚了元素 ID 之后,我们就可以使用 id 进行元素定位,方式如下 from...name属性值定位 driver.find_element_by_name("name") name 定位的方式与 id 相似,都是需要通过查找name的值,然后调用对应的 api,使用方式如下: from...("http://baidu.com") # 通过 id 定位元素 i = driver.find_element_by_name("wd") # 往输入框输入值 i.send_keys("菜农曰")...类名定位 driver.find_element_by_class_name("className") 与 id 和 name 定位方式一致,需要找到对应的 className 然后进行定位~ 标签名定位...~ scrapy request 和 scrapy 的区别可能就在于,scrapy 是一个比较重量级的框架,它属于网站级爬虫,而 request 是页面级爬虫,并发数和性能没有 scrapy 那么好 2
标签的定位 在HTML当中,ID属性是唯一标识一个元素的属性,因此在selenium当中,通过ID来进行元素的定位也作为首选,我们以百度首页为例,搜索框的HTML代码如下,其ID为“kw”,而“百度一下...”这个按钮的ID为“su”,我们用Python脚本通过ID的标签来进行元素的定位 driver.find_element_by_id("kw") driver.find_element_by_id("su...") NAME标签的定位 在HTML当中,Name属性和ID属性的功能基本相同,只是Name属性并不是唯一的,如果遇到没有ID标签的时候,我们可以考虑通过Name标签来进行定位,代码如下 driver.find_element_by_name...("classname") 这个时候,我们就可以通过class属性来定位元素,该方法返回的是一个list列表,而当我们想要定位列表当中的第n个元素时,则可以这样来安排 driver.find_elements_by_class_name...("classname")[n] 需要注意的是,这里使用的是find_elements_by_class_name()方法而不是find_element_by_class_name()方法,这里我们还是通过百度首页的例子
今天突然奇想,想去爬一下贴吧试试,而躺枪的当然是python吧 本次爬取利用了requests包去请求,bs4去解析页面,同时用了云mongodb,利用pymongdb去链接 接下来就讲解一下怎么去爬取贴吧的...id找,则使用id参数 find_all()查找所有符合的数据,如果根据class去找,则使用class_参数, 如果直接根据标签去找,则不需要id或者class_参数,下面的方法都有用到 在解析中,我先找到了...=BeautifulSoup(response,'html.parser') #根据页面解析获取ul标签 ul=soup.find("ul",id='thread_list...') #获取下面的li标签 liList=ul.find_all('span',class_='frs-author-name-wrap') #解析获取需要的数据...反扒,在请求第二个链接时,会出现重定向,经过postman请求发现,不是链接的问题,那只能是频繁请求被封, 解决思路:配置请求头,放宽请求时间等。
(name='p',class_='story') # print(p) # b=soup.find(name='b') # print(b) # 通过属性查找方式一 # b=soup.find(id...='id_b') # print(b) # 通过属性查找的方式二 # b=soup.find(attrs={'id':'id_b'}) # p=soup.find(attrs={'class':'story...'}) # print(p) # 列表查找 # ret=soup.find_all(name=['p','b']) # ret=soup.find_all(id=['id_b','link1']) #...(id=re.compile('^l')) # print(ret) # True # 查找所有有id的标签 # ret=soup.find_all(id=True) # ret=soup.find_all...,这样可以防止服务端因为我们请求次数过多而封我们的ip。
发送网络请求 使用requests库: 导入库: import requests 请求类型: get请求: ret = requests.get(url = url) post请求: ret...添加请求头:UA伪装: ret = requests.get(url = url,headers = {"User-Agent": "xxx"}) “xxx”处省略 修改编码格式: 爬取数据时...参数 : find_all(name, attrs, recursive, string, **kwargs) name:要查找的标签名。 attrs:一个字典,用于指定要查找的标签的属性。...find()函数 find() 方法与 find_all() 类似,但它只返回第一个匹配的标签(而不是一个列表)。如果没有找到匹配的标签,则返回 None。...查找第一个标签 soup.find('p') 查找所有标签 soup.find_all('p') 查找ID为'my-id'的元素 soup.find(id='my-id'
='images'> id='id_1'>Name: My image 1 </...(Keys.ENTER) def get_goods(bro): li_list = bro.find_elements_by_class_name('gl-item') # li_list.find_element_by_css_selector...' + li.find_element_by_css_selector('.p-img img').get_attribute('data-lazy-img') good_name =...li.find_element_by_css_selector('.p-name>a').get_attribute('title') print('商品名:',good_name)...') submit=bro.find_element_by_id('loginSub') submit.click() #获取cookie # 使用requests模块,携带cookie朝某个接口发请求