云顶集团娱4118-4118ccm云顶集团
做最好的网站

python爬虫入门【云顶集团】,字符串要点

日期:2019-12-12编辑作者:云顶集团
 1 def test_login(self):
 2 
 3     …省略打开登录页面的代码(这段就不注释了#)
 4 
 5     automatic_login = self.driver.find_element_by_id('remember_me')
 6 
 7     #检查登录页面复选框,是否默认不被选中
 8 
 9     self.assertFalse(automatic_login.is_selected())
10 
11     #点击选中复选框
12 
13     automatic_login.click()

运作前面世了难点:ord(卡塔尔 expected string of length 1, but int found

爬虫(Spider卡塔尔(قطر‎,反爬虫(Anti-Spider卡塔尔,反反爬虫(Anti-Anti-Spider卡塔尔之间恢宏壮阔的无动于衷争...

一、字符串

六、Django框架中session存款和储蓄到redis中的配置

私下认可意况下session是积攒在数据库中的,不过当用session保存客商的情景时,顾客频仍的拜会服务器,会叠合数据库的压力,也会下降客户访谈的进程。为了缓慢解决这么些主题素材将session存款和储蓄到redis中。

率先种配备情势:(不利用Django中session暗中同意的积攒方式,直接将session存款和储蓄之处安插到redis中)

# 1.在虚拟环境中安装包
pip install django-redis-sessions==0.5.6

# 2.在Django项目的settings文件中增加下面的配置
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 2
SESSION_REDIS_PASSWORD = ''
SESSION_REDIS_PREFIX = 'session'

 

 第三种配备情势:(先将Django中的缓存设置为redis,然后将session的存放地点设置为Django的缓存中)

#1.先在虚拟环境中安装包
pip install django_redis

#2. 设置redis作为django的缓存设置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        # 把这里缓存你的redis服务器ip和port
        "LOCATION": "redis://172.16.179.142:6379/12",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

# 3.设置redis存储django的session信息
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

 

功能/属性

简单说明

current_url

获取当前页面的URL地址(driver.current_url)
下面的都是以这种方式,driver指浏览器驱动实例。
window_handle
获取当前窗口的句柄
name
获取该实例底层的浏览器名称
orientation
获取当前设备的方位
page_source
获取当前页面源代码
title
获取当前页面的标题
window_handles
获取当前会话里所有窗口的句柄

源代码是那样:

超过下来框必要采纳操作时,Selenium特意提供了Select类来管理下拉框

  •   透过string定义叁个字符串,恐怕经过String类来创造对象。

    •   通过new String(卡塔尔创立有须臾间二种布局函数(从元数据),以此顺序成立string;
    • 云顶集团 1云顶集团 2

      //
              // 摘要:
              //     将 System.String 类的新实例初始化为由 Unicode 字符数组指示的值。
              //
              // 参数:
              //   value:
              //     Unicode 字符的数组。
              [SecuritySafeCritical]
              public String(char[] value);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 8 位有符号整数数组的指针指示的值。
              //
              // 参数:
              //   value:
              //     一个指针,指向以 null 结尾的 8 位带符号整数数组。
              //
              // 异常:
              //   T:System.ArgumentNullException:
              //     value 为 null。
              //
              //   T:System.ArgumentException:
              //     如果 value 是用 ANSI 编码的,则不能使用 value 初始化 System.String 的新实例。
              //
              //   T:System.ArgumentOutOfRangeException:
              //     要初始化的新字符串的长度过大,无法分配,该长度由 value 的 null 终止字符决定。
              //
              //   T:System.AccessViolationException:
              //     value 指定的地址无效。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(sbyte* value);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 Unicode 字符数组的指定指针指示的值。
              //
              // 参数:
              //   value:
              //     指向以 null 终止的 Unicode 字符数组的指针。
              //
              // 异常:
              //   T:System.ArgumentOutOfRangeException:
              //     当前进程并不是对所有编址字符都有读取权限。
              //
              //   T:System.ArgumentException:
              //     value 指定了包含无效 Unicode 字符的数组,或者 value 指定了小于 64000 的地址。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(char* value);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由重复指定次数的指定 Unicode 字符指示的值。
              //
              // 参数:
              //   c:
              //     一个 Unicode 字符。
              //
              //   count:
              //     c 出现的次数。
              //
              // 异常:
              //   T:System.ArgumentOutOfRangeException:
              //     count 小于零。
              [SecuritySafeCritical]
              public String(char c, int count);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由 Unicode 字符数组、该数组内的起始字符位置和一个长度指示的值。
              //
              // 参数:
              //   value:
              //     Unicode 字符的数组。
              //
              //   startIndex:
              //     value 内的起始位置。
              //
              //   length:
              //     要使用的 value 内的字符数。
              //
              // 异常:
              //   T:System.ArgumentNullException:
              //     value 为 null。
              //
              //   T:System.ArgumentOutOfRangeException:
              //     startIndex 或 length 小于零。- 或 -startIndex 和 length 之和大于 value 中的元素数。
              [SecuritySafeCritical]
              public String(char[] value, int startIndex, int length);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 8 位有符号整数数组的指定指针、该数组内的起始位置和一个长度指示的值。
              //
              // 参数:
              //   value:
              //     指向 8 位带符号整数数组的指针。
              //
              //   startIndex:
              //     value 内的起始位置。
              //
              //   length:
              //     要使用的 value 内的字符数。
              //
              // 异常:
              //   T:System.ArgumentNullException:
              //     value 为 null。
              //
              //   T:System.ArgumentOutOfRangeException:
              //     startIndex 或 length 小于零。- 或 -由 value + startIndex 指定的地址相对于当前平台来说太大;即,地址计算溢出。-
              //     或 -要初始化的新字符串的长度太大,无法分配。
              //
              //   T:System.ArgumentException:
              //     由 value + startIndex 指定的地址小于 64K。- 或 -如果 value 是用 ANSI 编码的,则不能使用 value 初始化 System.String
              //     的新实例。
              //
              //   T:System.AccessViolationException:
              //     value、startIndex 和 length 共同指定的地址无效。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(sbyte* value, int startIndex, int length);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 Unicode 字符数组的指定指针、该数组内的起始字符位置和一个长度指示的值。
              //
              // 参数:
              //   value:
              //     指向 Unicode 字符数组的指针。
              //
              //   startIndex:
              //     value 内的起始位置。
              //
              //   length:
              //     要使用的 value 内的字符数。
              //
              // 异常:
              //   T:System.ArgumentOutOfRangeException:
              //     startIndex 或 length 小于零,value + startIndex 引起指针溢出,或者当前进程并不是对所有编址字符都有读取权限。
              //
              //   T:System.ArgumentException:
              //     value 指定了包含无效 Unicode 字符的数组,或者 value + startIndex 指定了小于 64000 的地址。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(char* value, int startIndex, int length);
              //
              // 摘要:
              //     将 System.String 类的新实例初始化为由指向 8 位有符号整数数组的指定指针、该数组内的起始位置、长度以及 System.Text.Encoding
              //     对象指示的值。
              //
              // 参数:
              //   value:
              //     指向 8 位带符号整数数组的指针。
              //
              //   startIndex:
              //     value 内的起始位置。
              //
              //   length:
              //     要使用的 value 内的字符数。
              //
              //   enc:
              //     一个对象,用于指定如何对 value 所引用的数组进行编码。如果 enc 为 null,则假定以 ANSI 编码。
              //
              // 异常:
              //   T:System.ArgumentNullException:
              //     value 为 null。
              //
              //   T:System.ArgumentOutOfRangeException:
              //     startIndex 或 length 小于零。- 或 -由 value + startIndex 指定的地址相对于当前平台来说太大;即,地址计算溢出。-
              //     或 -要初始化的新字符串的长度太大,无法分配。
              //
              //   T:System.ArgumentException:
              //     由 value + startIndex 指定的地址小于 64K。- 或 -未能使用 value 初始化 System.String 的新实例,假定 value
              //     按照 enc 的指定进行编码。
              //
              //   T:System.AccessViolationException:
              //     value、startIndex 和 length 共同指定的地址无效。
              [CLSCompliant(false)]
              [SecurityCritical]
              public String(sbyte* value, int startIndex, int length, Encoding enc);
      

      View Code

    • 云顶集团 3云顶集团 4

      char []cstr = { 'a','b','c','d','e'};
                  char cstr1 = 'a';
                  sbyte se = 113;
      
                  String a = new String(cstr);
                  //
      
                  String b = new String(&cstr1);
      
                  String c = new String(&se);
      
                  String d = new String('d',2);
      
                  String e = new String(cstr,2,3);
      
                  String f = new String(&se,0,1);
                  Console.WriteLine((int)Convert.ToChar(f)+"n");//113
                  String g = new String(&se,0,1,Encoding.UTF8);
                  Console.WriteLine("a:{0}nb:{1}nc:{2}nd:{3}ne:{4}nf:{5}ng:{6}",a,b,c,d,e,f,g);
      

      View Code

  •   string是C#基元类型(primitive卡塔尔(قطر‎,string简单的话就是编写翻译器直接支持的数据类型。运算符(== 和 !=卡塔尔国是为着相比较 string 对象的值, 并非相比引用

    • string a = "1234";
                  string b = "123";
                  b += "4";
                  Console.WriteLine(a == b);//比较值
                  Console.WriteLine((object)a == (object)b);//比较引用()
      
       
  •   string连接操作 (+=)

    •   劣势很生硬, 操作频仍的话非常荒芜内部存储器空间的
    •   使用StringBuilder类对象方法append代替+=, 品质还大概有所进步
  •   null," "和string.Empty的区别
    •   null代表不援用任何变量的空引用的值,null是援用变量的私下认可值, 值类型变量无法利用
    •   ""表示分配多个内部存款和储蓄器为空的蕴藏空间。
    •   string.Empty表示空字符串,而且不分配内部存款和储蓄器空间。
  •   剖断字符串为空 的俩种艺术
    •   x.length==0 // 无法决断为null的字符串
    •   string.IsNullOrEmpty(x)   

三、启动redis:

1.基于安插文件运营redis服务器

sudo redis-server /etc/redis/redis.conf 

 

2.启动redis客户端:

redis-cli

 

3.输入ping命令测量试验:

127.0.0.1:6379> ping
PONG

 

4.关闭redis服务器:

ps aux|grep redis    # 查看redis进程号
kill -9 pid redis进程号    # 关闭redis服务器

 

5.切换数据库:暗中认可有15个,通过0-15来标志,私下认可是第一个数据库0号数据库。

select n

 

方法

简单说明

close()
关闭当前浏览器窗口
back()
后退一步
forward()
前进一步
get(url)
访问URL并加载网页到当前的浏览器会话
maximize_window()
最大化浏览器窗口
quit()
退出当前的驱动实例并关闭所有相关窗口
refresh()
刷新当前页面
implicitly_wait()
等待时间,单位为秒
set_page_load_timeout()
设置一个页面完全加载完成的超时等待时间,单位为秒
set_script_timeout()
设置脚本执行的超时时间

s=b'^SdVkT#python爬虫入门【云顶集团】,字符串要点。S ]`Y\!^)x8fx80ism'
key=''
for i in s:
     i=ord(i)-16
     key+=chr(i^32)
print (key)

下载selenium webdriver ‘geckodriver.exe’,下载好后放置python目录里面

二、 配置redis:

安顿音信在/etc/redis/redis.conf下,展开sudo vi /etc/redis/redis.conf。

骨干配置选项:

绑定ip:bind 127.0.0.1

端口号:port 6379

是还是不是以守护进度运营:daemonize yes  必需改为yes

数据库文件:dbfilename dump.db  

数据库文件存款和储蓄路线:dir /var/lib/redis  可改可不改,改的话提前创设好文件夹

日记文件:logfile /var/log/redis/redis-server.log  必要求改,提前创造好文件夹

数据库,默认有16个:database 16

主从复制:slaveof

铺排小结:首要校正两块:1,守护进程;2.日志文件路径

举个例子说,能够动用下边包车型地铁办法检查和讯登入页面包车型客车复选框是或不是被入选

于是现身这一个难点,是在字符串调换过程中冒出了三个小错误,在黄金年代密密层层百度和Google后,开掘概念依旧很迷糊,可是在曙光大佬的解答后,明白了怎么管理,正是在s后加””,运维后发觉完美肃清

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

四、redis的多少操作:

1.redis的存放格式为key-value格式。key是字符串类型,value的类别有5种:string、hash、list、set、zset。

2.redis中有关键的宽广的操作:

2.1查看左右的键:keys *

2.2翻看某些键是还是不是留存,存在重临1不设有重返0:exists key1

2.3查看键的值对应的数据类型:type key1

2.4去除键值对:del key1 key2

2.5设置键的过期时间,若无一些名默许一贯留存:expire key seconds

2.6查看键的管事时间:ttl key1

2.7清空数据库:flushall

3.string类型的基本操作:

3.1保存

  • set key value  保存单个键值对
  • mset key1 value1 key2 value2  保存七个键值对
  • setex key seconds value  设置键值和过期时间
  • append key value追加值

3.2获取

  • get key  获取单个
  • mget key1 key2  获取多少个

3.3删除

  • del key

4 hash类型的基本操作:

4.1保存

hset key field value    #设置单个属性
hmset key field1 value1 field2 value2 ...    #设置多个属性

 

4.2获取

hkeys key    # 获取指定键的所有属性
hget key field    # 获取单个属性的值
hmget key field1 field2 ...    # 获取多个属性的值
hvals key    # 获取所有属性的值

 

4.3删除

del key    # 删除整个hash的键和值
hdel key field1 field2 ...    # 删除属性和属性对应的值

 

4.4有关hash类型的个人理解:

能够将hash类型理解为用来积累对象:

云顶集团 5

 

 5。list类型的基本操作:

5.1保存

lpush key value1 value2 ...    #从左侧依次插入数据
rpush key value1 value2 ...    #从右侧依次插入数据
linsert key before或after 现有元素 新元素    #从指定元素的前或后插入新元素

 

 5.2获取

lrange key start stop    

 

 start、stop为成分的下标索引,从侧边最早,第二个因素为0,-1标志最终贰个因素。获取具备的要素:lrange key 0 -1

5.3去除内定元素

lrem key count value

 

 将列表中前count次面世的值为value的要素移除。

count > 0: 从头至尾移除

count < 0: 从尾到头移除

count = 0: 移除全体

 6.set类型的基本操作

性子:严节集中、成分唯黄金年代性不另行、未有改换操作

6.1增法郎素

sadd key member1 member2 ...

 

 6.2得到成分

smembers key    # 返回所有元素

 

6.3刨除钦命成分

srem key member1 member2 ...

 

 

 7.zset类型的数额操作

特色:有序聚焦、元素唯少年老成性不重复、未有退换操作、各样成分都会波及贰个double类型的权重,根据权重从小到大排列

7.1增加

zadd key score1 member1 score2 member2 ...

 

7.2获取

zrange key start stop  # 根据索引获取

zrangebyscore key min max  # 获取权重在min和max之间的数据
zscore key member  # 返回成员member的score值

 

7.3删除

zrem key member1 member2 ...    # 删除指定元素
zremrangebyscore key min max    #删除权重在指定范围的元素

(这里只是举个例证哈,直接复制是没用的,上面包车型客车代码只固定部分字段(邮箱、登陆名和注册按键),况且从不拍卖验证码,验证码部分以往再研究怎么管理)

实例 模拟登录douban网址

一、安装redis:

1.下载:

wget http://download.redis.io/releases/redis-3.2.8.tar.gz

 2.解压

tar -zxvf redis-3.2.8.tar.gz

 

3.复制,放到/usr/local目录下

sudo mv ./redis-3.2.8 /usr/local/redis

 

4.进入到redis目录下

cd /usr/local/redis/

 

云顶集团,5.生成

sudo make

 

6.测量检验,时间会比较长

sudo make test

 

7.装置,将redis的吩咐安装到usr/local/bin/目录中

sudo make install

 

8.设置成功后,步向usr/local/bin/目录中查阅:

cd /usr/local/bin

 

 云顶集团 6

9.将配置文件复制放到/etc/redis目录下:

sudo cp /usr/local/redis/redis.conf /etc/redis/redis.conf

 

 大概刚开头etc下未有redis目录,必要协和手动成立二个redis文件夹。

以上在第6步的时候恐怕会遇见这么的标题:

You need tcl 8.5 or newer in order to run the Redis test
make: *** [test] Error 1

 

解决办法:安装tcl 

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz  
sudo tar xzvf tcl8.6.1-src.tar.gz  -C /usr/local/  
cd  /usr/local/tcl8.6.1/unix/  
sudo ./configure  
sudo make  
sudo make install 

 

比如说,和讯注册成效的自动化:

5.弹窗管理

五、redis与python进行交互作用:

 1.在虚构遭遇中安装redis包:

pip install redis

 

 2.调用模块:

from redis import StrictRedis

 

 3.创立对象:

sr = StrictRedis(host='localhost', port=6379, db=0)  # 默认就是这样的值,不写也行。

 

 4.用sr那么些指标操作redis,将redis中的命令充作函数让sr调用就ok。

 1 def test_register_new_user(self):
 2 
 3     #定位并点击博客园首页的 注册 
 4 
 5     login_area = self.driver.find_element_by_css_selector('#login_area')
 6 
 7     register = login_area.find_element_by_link_text('注册')
 8 
 9     register.click()
10 
11     #检查打开的网页标题是不是'用户注册 - 博客园'
12 
13     self.assertTrue('用户注册 - 博客园' == self.driver.title)
14 
15     # 定位注册页面各个字段及注册按钮
16 
17     user_email = self.driver.find_element_by_id('Email')
18 
19     user_login_name = self.driver.find_element_by_id('LoginName')
20 
21     register_btn = self.driver.find_element_by_id('submitBtn')
22 
23     # 检查字段允许的最大输入字符与最小输入字符是否与预期一致
24 
25     self.assertEqual('2', user_login_name.get_attribute('data-val-length-min'))
26 
27     self.assertEqual('30', user_login_name.get_attribute('data-val-length-max'))
28 
29     # 检查各个字段及按钮对用户是否可见及可用
30 
31     self.assertTrue(user_email.is_displayed() and user_email.is_enabled())
32 
33     # 输入用户信息
34 
35     user_email.send_keys('test@163.com')
36 
37     user_login_name.send_keys('test')
38 
39     # 点击注册按钮
40 
41     register_btn.click()
42 
43     # 检查是否显示注册成功的提示
44 
45     self.assertTrue(self.driver.find_element_by_css_selector('p.txt-title.success-color').text == '注册成功')

操作页面包车型大巴发展和滞后作用:

 

6.页面切换

本文由云顶集团娱4118发布于云顶集团,转载请注明出处:python爬虫入门【云顶集团】,字符串要点

关键词:

半即时制手游做职分嫌麻烦云顶集团:,Python爬

停放操作 软件名:anaconda 版本:Anaconda3-5.0.1-Windows-x86_64哈工业余大学学镜像 下载链接: 软件名:Pycharm 版本:py...

详细>>

python之常用模块,今天Python练手小游戏

  匡适逢其时.bat文件里的门径后,双击运转就可以。 思路:  1:主飞机从最底层y = 1生成,左右移动,每趟左右x轴...

详细>>

台积电推出品质增强的7nm和5nm成立工艺,AI把关劲

据国外媒体报导,人工智能和物联网本领在食物饮品行当的行使越发频仍。在此二日的壹次访问中,干红厂SugarCreek...

详细>>

苹果第三财务情状净收益100,Google开掘6处Motoro

侥幸的是,那么些漏洞是由平安商量人口发掘的,他们无意使用那一个漏洞来贪图利益。ZDNet建议,像这样的狐狸尾巴...

详细>>