Once upon a time there were three little sisters; and their names were\n",
+ " Elsie,\n",
+ " Lacie and\n",
+ " Tillie;\n",
+ " and they lived at the bottom of a well.
,\n",
+ " ...
]"
]
},
- "execution_count": 13,
+ "execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "soup.select('.title')"
+ "soup.select('.story')"
]
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 16,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-10-25T07:32:39.488639Z",
- "start_time": "2021-10-25T07:32:39.484278Z"
+ "end_time": "2023-10-27T06:56:28.766310Z",
+ "start_time": "2023-10-27T06:56:28.761632Z"
},
"slideshow": {
"slide_type": "fragment"
@@ -717,7 +723,7 @@
" Once upon a time there were three little sisters; and their names were\n",
- " Elsie,\n",
- " Lacie and\n",
- " Tillie;\n",
- " and they lived at the bottom of a well.
,\n",
- " ...
]"
+ "[...
]"
]
},
- "execution_count": 25,
+ "execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
@@ -970,11 +971,11 @@
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 24,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-10-25T07:37:10.528988Z",
- "start_time": "2021-10-25T07:37:10.524937Z"
+ "end_time": "2023-10-27T07:00:21.412286Z",
+ "start_time": "2023-10-27T07:00:21.408110Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -993,7 +994,7 @@
" ...
]"
]
},
- "execution_count": 26,
+ "execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
@@ -1004,11 +1005,11 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 25,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-10-25T07:48:28.733810Z",
- "start_time": "2021-10-25T07:48:28.729607Z"
+ "end_time": "2023-10-27T07:00:30.564143Z",
+ "start_time": "2023-10-27T07:00:30.559833Z"
},
"slideshow": {
"slide_type": "fragment"
@@ -1027,7 +1028,7 @@
" ...
]"
]
},
- "execution_count": 27,
+ "execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
@@ -1038,11 +1039,11 @@
},
{
"cell_type": "code",
- "execution_count": 28,
+ "execution_count": 26,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-10-25T07:48:45.509561Z",
- "start_time": "2021-10-25T07:48:45.505432Z"
+ "end_time": "2023-10-27T07:00:36.932827Z",
+ "start_time": "2023-10-27T07:00:36.928226Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -1055,7 +1056,7 @@
"\n",
" \n",
" 0 | \n",
- " 邹正 | \n",
- " 18b1b347f9e34badb8934c2acec80e9e | \n",
- " 0001 | \n",
- " 2019-01-12 16:04:48 | \n",
- " 关于完善城市环卫公厕指引系统的建议 | \n",
" 1 | \n",
- " 城乡建设 | \n",
- " 2019 | \n",
- " 调研情况: 2015 年 4 月 1 日,习近平总书记首次提出要坚持不懈地推进“厕所革... | \n",
+ " 0001 | \n",
+ " 关于深入落实长江大保护战略,推动我省沿江化工产业绿色高质量发展的建议 | \n",
+ " dd619f014d23456cb403ceb12506739a | \n",
+ " 2022 | \n",
+ " 2022-01-18 16:12:23 | \n",
+ " 严华 | \n",
+ " 工业商贸 | \n",
+ " 调研情况:化工产业是江苏省支柱产业之一,是我省重要的基础性产业,产业规模、行业基础、技术水平... | \n",
"
\n",
" \n",
" 1 | \n",
- " 省政协学习委员会 | \n",
- " da43aae2378244faa961dd1224d1343e | \n",
- " 0002 | \n",
- " 2019-01-12 16:04:48 | \n",
- " 关于加强老小区光纤化改造的建议 | \n",
" 2 | \n",
- " 城乡建设 | \n",
- " 2019 | \n",
- " 调研情况:近期,省政协学习委员会组织部分委员对我省信息通信业发展情况进行考察调研,总的感到,... | \n",
+ " 0002 | \n",
+ " 关于重视人工智能应用安全的建议 | \n",
+ " df4b6c2109af42b2a04b135212923f98 | \n",
+ " 2022 | \n",
+ " 2022-01-18 10:29:37 | \n",
+ " 仲盛 | \n",
+ " 科学技术 | \n",
+ " 调研情况:习近平总书记强调:“人工智能是新一轮科技革命和产业变革的重要驱动力量,加快发展新一... | \n",
"
\n",
" \n",
" 2 | \n",
- " 许文前 | \n",
- " c0a1626a1bb744ebb0852cf25b21fb0a | \n",
- " 0004 | \n",
- " 2019-01-12 15:42:19 | \n",
- " 加强科技创新,推动制造业转型升级 | \n",
" 3 | \n",
+ " 0004 | \n",
+ " 关于打造软件信息产业联动先行区的建议 | \n",
+ " 7f97456a314444c3b59ced0374bb01fc | \n",
+ " 2022 | \n",
+ " 2022-01-18 16:12:23 | \n",
+ " 钱再见 | \n",
" 工业商贸 | \n",
- " 2019 | \n",
- " 调研情况: 早在2012年,美国国会的一份报告就声称,华为和中兴通讯可能涉嫌从事威胁美国... | \n",
+ " 调研情况: 2021年2月8日,南京都市圈发展规划获国家发改委批复,要求以区域间的就近性、互... | \n",
"
\n",
" \n",
" 3 | \n",
- " 段绪强 | \n",
- " ce60d71296764cfe997d62bb2c0990af | \n",
- " 0005 | \n",
- " 2019-01-12 16:21:46 | \n",
- " 关于落实金融政策、促进民营企业高质量发展的建议 | \n",
" 4 | \n",
- " 财税金融 | \n",
- " 2019 | \n",
- " 调研情况:2018年,国家支持民营企业融资所出台的政策众多、且力度空前。这在一定程度上提振了... | \n",
+ " 0005 | \n",
+ " 关于设立“江苏工匠日”的建议 | \n",
+ " f5f0aa468ecf4af5be2438393d54a49d | \n",
+ " 2022 | \n",
+ " 2022-01-18 16:06:13 | \n",
+ " 马永青等9人 | \n",
+ " 文化宣传 | \n",
+ " 调研情况:近年来,省政协总工会界别委员认真学习贯彻党的十九大精神,围绕省委省政府和省“两会”... | \n",
"
\n",
" \n",
" 4 | \n",
- " 侯建军 | \n",
- " 8b5fb5a7d86547899835a12af398ffc7 | \n",
- " 0006 | \n",
- " 2019-01-12 15:42:19 | \n",
- " 关于主基地航空公司协同东部机场集团发展的建议 | \n",
" 5 | \n",
- " 工业商贸 | \n",
- " 2019 | \n",
- " 调研情况:2018年初,在呈报的题为《关于大力发展江苏民航补齐综合交通运输体系短板的几点建议... | \n",
+ " 0006 | \n",
+ " 关于进一步重视和支持企业提升人才吸引力的建议 | \n",
+ " a666191fb1644a5f83009ac1a0dd5e5b | \n",
+ " 2022 | \n",
+ " 2022-01-19 19:23:47 | \n",
+ " 甘霖 | \n",
+ " 社会事业 | \n",
+ " 调研情况:为进一步加大对民营经济高质量发展支持力度,我省出台《关于促进民营经济高质量发展的意... | \n",
"
\n",
" \n",
"\n",
""
],
"text/plain": [
- " personnel_name pkid proposal_number \\\n",
- "0 邹正 18b1b347f9e34badb8934c2acec80e9e 0001 \n",
- "1 省政协学习委员会 da43aae2378244faa961dd1224d1343e 0002 \n",
- "2 许文前 c0a1626a1bb744ebb0852cf25b21fb0a 0004 \n",
- "3 段绪强 ce60d71296764cfe997d62bb2c0990af 0005 \n",
- "4 侯建军 8b5fb5a7d86547899835a12af398ffc7 0006 \n",
+ " rownum proposal_number reason \\\n",
+ "0 1 0001 关于深入落实长江大保护战略,推动我省沿江化工产业绿色高质量发展的建议 \n",
+ "1 2 0002 关于重视人工智能应用安全的建议 \n",
+ "2 3 0004 关于打造软件信息产业联动先行区的建议 \n",
+ "3 4 0005 关于设立“江苏工匠日”的建议 \n",
+ "4 5 0006 关于进一步重视和支持企业提升人才吸引力的建议 \n",
"\n",
- " publish_time reason rownum type year \\\n",
- "0 2019-01-12 16:04:48 关于完善城市环卫公厕指引系统的建议 1 城乡建设 2019 \n",
- "1 2019-01-12 16:04:48 关于加强老小区光纤化改造的建议 2 城乡建设 2019 \n",
- "2 2019-01-12 15:42:19 加强科技创新,推动制造业转型升级 3 工业商贸 2019 \n",
- "3 2019-01-12 16:21:46 关于落实金融政策、促进民营企业高质量发展的建议 4 财税金融 2019 \n",
- "4 2019-01-12 15:42:19 关于主基地航空公司协同东部机场集团发展的建议 5 工业商贸 2019 \n",
+ " pkid year publish_time personnel_name \\\n",
+ "0 dd619f014d23456cb403ceb12506739a 2022 2022-01-18 16:12:23 严华 \n",
+ "1 df4b6c2109af42b2a04b135212923f98 2022 2022-01-18 10:29:37 仲盛 \n",
+ "2 7f97456a314444c3b59ced0374bb01fc 2022 2022-01-18 16:12:23 钱再见 \n",
+ "3 f5f0aa468ecf4af5be2438393d54a49d 2022 2022-01-18 16:06:13 马永青等9人 \n",
+ "4 a666191fb1644a5f83009ac1a0dd5e5b 2022 2022-01-19 19:23:47 甘霖 \n",
"\n",
- " content \n",
- "0 调研情况: 2015 年 4 月 1 日,习近平总书记首次提出要坚持不懈地推进“厕所革... \n",
- "1 调研情况:近期,省政协学习委员会组织部分委员对我省信息通信业发展情况进行考察调研,总的感到,... \n",
- "2 调研情况: 早在2012年,美国国会的一份报告就声称,华为和中兴通讯可能涉嫌从事威胁美国... \n",
- "3 调研情况:2018年,国家支持民营企业融资所出台的政策众多、且力度空前。这在一定程度上提振了... \n",
- "4 调研情况:2018年初,在呈报的题为《关于大力发展江苏民航补齐综合交通运输体系短板的几点建议... "
+ " type content \n",
+ "0 工业商贸 调研情况:化工产业是江苏省支柱产业之一,是我省重要的基础性产业,产业规模、行业基础、技术水平... \n",
+ "1 科学技术 调研情况:习近平总书记强调:“人工智能是新一轮科技革命和产业变革的重要驱动力量,加快发展新一... \n",
+ "2 工业商贸 调研情况: 2021年2月8日,南京都市圈发展规划获国家发改委批复,要求以区域间的就近性、互... \n",
+ "3 文化宣传 调研情况:近年来,省政协总工会界别委员认真学习贯彻党的十九大精神,围绕省委省政府和省“两会”... \n",
+ "4 社会事业 调研情况:为进一步加大对民营经济高质量发展支持力度,我省出台《关于促进民营经济高质量发展的意... "
]
},
- "execution_count": 14,
+ "execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
@@ -614,7 +634,7 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2019-10-10T01:41:33.470909Z",
@@ -623,13 +643,20 @@
},
"outputs": [],
"source": [
- "#df.to_csv('../data/jszx2019.csv', index = False)"
+ "#df.to_csv('./data/jszx2022.csv', index = False)"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
}
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
@@ -643,7 +670,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.3"
+ "version": "3.9.7"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
diff --git a/04-crawler-fact-checking.ipynb b/04-crawler-fact-checking.ipynb
index 3fe3b0e..3e2414a 100644
--- a/04-crawler-fact-checking.ipynb
+++ b/04-crawler-fact-checking.ipynb
@@ -99,11 +99,11 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 1,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-10-25T08:22:37.028485Z",
- "start_time": "2021-10-25T08:22:36.609925Z"
+ "end_time": "2023-10-27T07:47:06.390250Z",
+ "start_time": "2023-10-27T07:47:05.651570Z"
},
"slideshow": {
"slide_type": "slide"
@@ -114,20 +114,81 @@
"import requests\n",
"from bs4 import BeautifulSoup\n",
"\n",
- "path = 'https://vp.fact.qq.com/api/article/list?locale=zh-CN&token=U2FsdGVkX1%252BSf5tazIgNXUkfSRI81VMClXBoG5lAMez6vJJWe%252BfsQqejh9QTvts7&page='\n",
+ "# path = 'https://vp.fact.qq.com/api/article/list?locale=zh-CN&token=U2FsdGVkX1%252BSf5tazIgNXUkfSRI81VMClXBoG5lAMez6vJJWe%252BfsQqejh9QTvts7&page='\n",
+ "path = 'https://vp.fact.qq.com/api/article/list?locale=zh-CN&token=U2FsdGVkX18wJCxvmPFL5AV2K4up19%252Fjtp2T%252F5nJsBZrsPhH9WhvW7smZP%252BVVcO9&page='\n",
"\n",
"url = path + '100'\n",
"content = requests.get(url)\n",
"d = content.json()"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-10-27T07:48:07.814806Z",
+ "start_time": "2023-10-27T07:48:07.809923Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'title': '郑州上午九点到十一点将空中喷洒消杀药物',\n",
+ " 'author': '郑州电台新闻广播官方微博',\n",
+ " 'authordesc': '郑州电台新闻广播官方微博',\n",
+ " 'id': 'd087b691eab2d89d7e177a299e183818',\n",
+ " 'Author': {'id': 1234,\n",
+ " 'name': '郑州新闻广播',\n",
+ " 'desc': '郑州电台新闻广播官方微博',\n",
+ " 'head': 'http://p.qpic.cn/jiaozhen/0/b6e73b0df15e4f6b90edd91f98ab3721/0',\n",
+ " 'level': 0,\n",
+ " 'artList': None,\n",
+ " 'openid': '',\n",
+ " 'unionid': '',\n",
+ " 'inviteId': '',\n",
+ " 'nickname': '',\n",
+ " 'headimgurl': '',\n",
+ " 'ext1': '',\n",
+ " 'ext2': None,\n",
+ " 'ext3': None,\n",
+ " 'ext4': None,\n",
+ " 'ext5': None,\n",
+ " 'createdAt': '2020-01-25T04:15:12.000Z',\n",
+ " 'updatedAt': '2020-01-25T04:15:12.000Z'},\n",
+ " 'date': '2020-01-25',\n",
+ " 'markstyle': 'fake',\n",
+ " 'result': '假',\n",
+ " 'explain': '谣言',\n",
+ " 'abstract': '郑州新闻广播记者拨打了12345市长热线,接线员说,并没有收到相关消毒通知。随后,记者又电话联系上河南省疾控中心,相关负责人告知,他们也没有收到相关通知。\\n郑州市疫情应急指挥中心的工作人员称,此条所谓的应急通知系谣言,如果有需要喷洒消杀药物,他们会提前进行告知。',\n",
+ " 'tag': ['肺炎', '新型冠状病毒'],\n",
+ " 'type': 1,\n",
+ " 'videourl': '',\n",
+ " 'cover': '//jiaozhen-70111.picnjc.qpic.cn/f1c1cb261d2a4dc5823e36a8ea30e606?imageView2/2/w/150/h/90',\n",
+ " 'coverrect': '//jiaozhen-70111.picnjc.qpic.cn/f1c1cb261d2a4dc5823e36a8ea30e606',\n",
+ " 'coversqual': '//jiaozhen-70111.picnjc.qpic.cn/f1c1cb261d2a4dc5823e36a8ea30e606?imageView2/2/w/300/h/300',\n",
+ " 'section': '',\n",
+ " 'iscolled': False,\n",
+ " 'arttype': 'normal'}"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "d['data']['list'][9]"
+ ]
+ },
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-10-25T08:22:43.422017Z",
- "start_time": "2021-10-25T08:22:43.412875Z"
+ "end_time": "2023-10-27T07:47:54.415276Z",
+ "start_time": "2023-10-27T07:47:54.410244Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -242,8 +303,8 @@
"execution_count": 10,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-10-25T08:27:31.318031Z",
- "start_time": "2021-10-25T08:26:33.785943Z"
+ "end_time": "2023-10-27T07:50:48.563252Z",
+ "start_time": "2023-10-27T07:49:26.910342Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -254,7 +315,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "100\r"
+ "104\r"
]
}
],
@@ -263,10 +324,10 @@
"import random\n",
"\n",
"jsons = []\n",
- "for i in range(1, 100+1):\n",
+ "for i in range(104+1):\n",
" print(i, end= '\\r')\n",
" sleep(random.random())\n",
- " path = 'https://vp.fact.qq.com/api/article/list?locale=zh-CN&token=U2FsdGVkX1%252BSf5tazIgNXUkfSRI81VMClXBoG5lAMez6vJJWe%252BfsQqejh9QTvts7&page='\n",
+ " path = 'https://vp.fact.qq.com/api/article/list?locale=zh-CN&token=U2FsdGVkX18wJCxvmPFL5AV2K4up19%252Fjtp2T%252F5nJsBZrsPhH9WhvW7smZP%252BVVcO9&page='\n",
" url = path + str(i)\n",
" content = requests.get(url)\n",
" d = content.json()\n",
@@ -279,8 +340,8 @@
"execution_count": 11,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-10-25T08:27:36.893800Z",
- "start_time": "2021-10-25T08:27:36.890238Z"
+ "end_time": "2023-10-27T07:50:53.391690Z",
+ "start_time": "2023-10-27T07:50:53.387616Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -290,7 +351,7 @@
{
"data": {
"text/plain": [
- "972"
+ "1025"
]
},
"execution_count": 11,
@@ -307,8 +368,8 @@
"execution_count": 12,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-10-25T08:27:43.032814Z",
- "start_time": "2021-10-25T08:27:42.330764Z"
+ "end_time": "2023-10-27T07:51:08.769265Z",
+ "start_time": "2023-10-27T07:50:59.865855Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -360,110 +421,110 @@
" \n",
" \n",
" 0 | \n",
- " 出公共场所再扫场所码可避免成为密接者 | \n",
- " 中央网信办违法和不良信息举报中心主办、新华网承办的辟谣平台 | \n",
- " 中央网信办违法和不良信息举报中心主办、新华网承办的辟谣平台 | \n",
- " 5537b7c1cad11570829276829d433f66 | \n",
- " {'id': 964, 'name': '中国互联网联合辟谣平台', 'desc': '中央... | \n",
- " 2022-10-10 | \n",
+ " 北京协和医院有武汉肺炎患者出逃 | \n",
+ " 综合类大型城市日报 | \n",
+ " 综合类大型城市日报 | \n",
+ " 502100d9aaf5d5ed23850933140f8088 | \n",
+ " {'id': 961, 'name': '新京报', 'desc': '综合类大型城市日报'... | \n",
+ " 2020-01-22 | \n",
" fake | \n",
" 假 | \n",
" 谣言 | \n",
- " 宁波市防控办对网传说法辟谣:扫场所码是为方便流调工作,确保一旦发现阳性病例,密接、次密接、时... | \n",
- " [场所码, 密接] | \n",
+ " 新京报记者致电北京协和医院,工作人员表示,该患者按照流程操作进行诊断和治疗,没有出逃。\\n该... | \n",
+ " [协和医院, 新型冠状病毒] | \n",
" 1 | \n",
" | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/x8kmEe2UrVaozy... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/x8kmEe2UrVaozy... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/x8kmEe2UrVaozy... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/1d25062126f0b8... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/1d25062126f0b8... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/1d25062126f0b8... | \n",
" | \n",
" False | \n",
" normal | \n",
"
\n",
" \n",
" 1 | \n",
- " 太原防疫短信带核酸结果“查询链接”,可以点击查询 | \n",
- " 中央人民广播电台广播新闻网 | \n",
- " 中央人民广播电台广播新闻网 | \n",
- " 667477e34d8ffc970dccd2256521c466 | \n",
- " {'id': 1195, 'name': '央广网', 'desc': '中央人民广播电台广... | \n",
- " 2022-10-10 | \n",
+ " 新型冠状病毒抗体能治疗和预防肺炎 | \n",
+ " 药理学硕士,知贝儿科药师 | \n",
+ " 药理学硕士,知贝儿科药师 | \n",
+ " d024bb6fdb1f60a8a785dd83c9a935d4 | \n",
+ " {'id': 226, 'name': '谢望时', 'desc': '药理学硕士,知贝儿科... | \n",
+ " 2020-01-22 | \n",
" fake | \n",
" 假 | \n",
- " 疑似诈骗 | \n",
- " 10月4日,经与太原市反诈骗中心核实,附有查询链接的该短信为诈骗链接,点击后会跳转至某钓鱼网... | \n",
- " [短信, 诈骗] | \n",
+ " 谣言 | \n",
+ " 京天成这次通报成功研制的抗体叫“2019冠状病毒N蛋白抗体”,理论上可以识别新型冠状病毒,以... | \n",
+ " [抗体, 新型冠状病毒] | \n",
" 1 | \n",
" | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/snc972bZU4sMFX... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/snc972bZU4sMFX... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/snc972bZU4sMFX... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/f0a11b7c9a84ef... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/f0a11b7c9a84ef... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/f0a11b7c9a84ef... | \n",
" | \n",
" False | \n",
" normal | \n",
"
\n",
" \n",
" 2 | \n",
- " 上海有人“持红码到酒吧蹦迪”数千人惨变密接 | \n",
- " 中央网信办违法和不良信息举报中心主办 | \n",
- " 中央网信办违法和不良信息举报中心主办 | \n",
- " 2faa44138715b91b2e8dc957fd2a6aab | \n",
- " {'id': 398, 'name': '中国互联网联合辟谣平台', 'desc': '中央... | \n",
- " 2022-10-10 | \n",
+ " 口罩正确戴法:感冒时有颜色的朝外,没感冒反过来 | \n",
+ " 国际谣言查证机构 | \n",
+ " 国际谣言查证机构 | \n",
+ " ca1dd5415f6acd1fbf7c22fd1e6e3dc1 | \n",
+ " {'id': 501, 'name': '反海外谣言中心', 'desc': '国际谣言查证... | \n",
+ " 2020-01-22 | \n",
" fake | \n",
" 假 | \n",
" 谣言 | \n",
- " 所谓“持红码到酒吧蹦迪”的说法系误传。根据上海警方调查,视频中出现的红码图片实为两名当事人存... | \n",
- " [红码, 蹦迪] | \n",
+ " 口罩正确的戴法是,有颜色的那一面(通常是绿色、蓝色或者粉红色)应该朝外,白色的那一面朝内。无... | \n",
+ " [口罩, 新型冠状病毒] | \n",
" 1 | \n",
" | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/7BKjGqTcXywwnz... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/7BKjGqTcXywwnz... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/7BKjGqTcXywwnz... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/61bb516ad6174f... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/61bb516ad6174f... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/61bb516ad6174f... | \n",
" | \n",
" False | \n",
" normal | \n",
"
\n",
" \n",
" 3 | \n",
- " 上海游客遇新疆疫情,变身葡萄采摘工 | \n",
- " 中央网信办违法和不良信息举报中心主办、新华网承办的辟谣平台 | \n",
- " 中央网信办违法和不良信息举报中心主办、新华网承办的辟谣平台 | \n",
- " abb50569bc1f464504caac8a2b864d76 | \n",
- " {'id': 964, 'name': '中国互联网联合辟谣平台', 'desc': '中央... | \n",
- " 2022-10-10 | \n",
+ " 这个玻璃装置是“隔离舱”,用它进行患者的隔离 | \n",
+ " 医学博士、副主任医师、中华医学会科普分会青年委员 | \n",
+ " 医学博士、副主任医师、中华医学会科普分会青年委员 | \n",
+ " 762167361e181d478652f85ac76fe34d | \n",
+ " {'id': 13, 'name': '胡远东', 'desc': '医学博士、副主任医师、... | \n",
+ " 2020-01-22 | \n",
" fake | \n",
" 假 | \n",
" 谣言 | \n",
- " 吐鲁番市农业农村局、林草局等相关部门核实,有关部门未采取过将滞留人员留在本地就业采摘葡萄的措... | \n",
- " [新疆, 游客] | \n",
+ " 这个装置学名叫隔离担架,主要用途是转运传染性疾病患者或者疑似患者,避免在转运过程中发生继发性... | \n",
+ " [隔离, 传染] | \n",
" 1 | \n",
" | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/iwStcGMpqU94pY... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/iwStcGMpqU94pY... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/iwStcGMpqU94pY... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/b0d32b60f5e90b... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/b0d32b60f5e90b... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/b0d32b60f5e90b... | \n",
" | \n",
" False | \n",
" normal | \n",
"
\n",
" \n",
" 4 | \n",
- " 体检查出肺结节,是打新冠疫苗打出来的 | \n",
- " 国家执业医师,神经科学硕士 | \n",
- " 国家执业医师,神经科学硕士 | \n",
- " 93dad175b3694399912fcac67a7e6f2c | \n",
- " {'id': 754, 'name': '庄时利和', 'desc': '国家执业医师,神经... | \n",
- " 2022-09-23 | \n",
+ " 放烟花爆竹可以消毒,预防瘟疫 | \n",
+ " 医学博士、副主任医师、中华医学会科普分会青年委员 | \n",
+ " 医学博士、副主任医师、中华医学会科普分会青年委员 | \n",
+ " a54f4a260301565af3454048724350f5 | \n",
+ " {'id': 13, 'name': '胡远东', 'desc': '医学博士、副主任医师、... | \n",
+ " 2020-01-21 | \n",
" fake | \n",
" 假 | \n",
- " 谣言 | \n",
- " 人群中肺结节的检出率其实并不低,绝大多数肺结节是良性的;肺结节除了关注大小以外,还应当关注数... | \n",
- " [新冠疫苗, 肺结节] | \n",
+ " 伪科学 | \n",
+ " 农业上确实有在大棚中燃烧硫磺杀灭害虫细菌的做法,但没有将硫化物用于医疗环境中的做法,因为硫化... | \n",
+ " [烟花爆竹, 瘟疫] | \n",
" 1 | \n",
" | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/qXboJt4mr1JRiD... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/qXboJt4mr1JRiD... | \n",
- " //jiaozhen-70111.picnjc.qpic.cn/qXboJt4mr1JRiD... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/814be59fed9db8... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/814be59fed9db8... | \n",
+ " //jiaozhen-70111.picnjc.qpic.cn/814be59fed9db8... | \n",
" | \n",
" False | \n",
" normal | \n",
@@ -473,61 +534,61 @@
""
],
"text/plain": [
- " title author \\\n",
- "0 出公共场所再扫场所码可避免成为密接者 中央网信办违法和不良信息举报中心主办、新华网承办的辟谣平台 \n",
- "1 太原防疫短信带核酸结果“查询链接”,可以点击查询 中央人民广播电台广播新闻网 \n",
- "2 上海有人“持红码到酒吧蹦迪”数千人惨变密接 中央网信办违法和不良信息举报中心主办 \n",
- "3 上海游客遇新疆疫情,变身葡萄采摘工 中央网信办违法和不良信息举报中心主办、新华网承办的辟谣平台 \n",
- "4 体检查出肺结节,是打新冠疫苗打出来的 国家执业医师,神经科学硕士 \n",
+ " title author \\\n",
+ "0 北京协和医院有武汉肺炎患者出逃 综合类大型城市日报 \n",
+ "1 新型冠状病毒抗体能治疗和预防肺炎 药理学硕士,知贝儿科药师 \n",
+ "2 口罩正确戴法:感冒时有颜色的朝外,没感冒反过来 国际谣言查证机构 \n",
+ "3 这个玻璃装置是“隔离舱”,用它进行患者的隔离 医学博士、副主任医师、中华医学会科普分会青年委员 \n",
+ "4 放烟花爆竹可以消毒,预防瘟疫 医学博士、副主任医师、中华医学会科普分会青年委员 \n",
"\n",
- " authordesc id \\\n",
- "0 中央网信办违法和不良信息举报中心主办、新华网承办的辟谣平台 5537b7c1cad11570829276829d433f66 \n",
- "1 中央人民广播电台广播新闻网 667477e34d8ffc970dccd2256521c466 \n",
- "2 中央网信办违法和不良信息举报中心主办 2faa44138715b91b2e8dc957fd2a6aab \n",
- "3 中央网信办违法和不良信息举报中心主办、新华网承办的辟谣平台 abb50569bc1f464504caac8a2b864d76 \n",
- "4 国家执业医师,神经科学硕士 93dad175b3694399912fcac67a7e6f2c \n",
+ " authordesc id \\\n",
+ "0 综合类大型城市日报 502100d9aaf5d5ed23850933140f8088 \n",
+ "1 药理学硕士,知贝儿科药师 d024bb6fdb1f60a8a785dd83c9a935d4 \n",
+ "2 国际谣言查证机构 ca1dd5415f6acd1fbf7c22fd1e6e3dc1 \n",
+ "3 医学博士、副主任医师、中华医学会科普分会青年委员 762167361e181d478652f85ac76fe34d \n",
+ "4 医学博士、副主任医师、中华医学会科普分会青年委员 a54f4a260301565af3454048724350f5 \n",
"\n",
" Author date markstyle \\\n",
- "0 {'id': 964, 'name': '中国互联网联合辟谣平台', 'desc': '中央... 2022-10-10 fake \n",
- "1 {'id': 1195, 'name': '央广网', 'desc': '中央人民广播电台广... 2022-10-10 fake \n",
- "2 {'id': 398, 'name': '中国互联网联合辟谣平台', 'desc': '中央... 2022-10-10 fake \n",
- "3 {'id': 964, 'name': '中国互联网联合辟谣平台', 'desc': '中央... 2022-10-10 fake \n",
- "4 {'id': 754, 'name': '庄时利和', 'desc': '国家执业医师,神经... 2022-09-23 fake \n",
+ "0 {'id': 961, 'name': '新京报', 'desc': '综合类大型城市日报'... 2020-01-22 fake \n",
+ "1 {'id': 226, 'name': '谢望时', 'desc': '药理学硕士,知贝儿科... 2020-01-22 fake \n",
+ "2 {'id': 501, 'name': '反海外谣言中心', 'desc': '国际谣言查证... 2020-01-22 fake \n",
+ "3 {'id': 13, 'name': '胡远东', 'desc': '医学博士、副主任医师、... 2020-01-22 fake \n",
+ "4 {'id': 13, 'name': '胡远东', 'desc': '医学博士、副主任医师、... 2020-01-21 fake \n",
"\n",
" result explain abstract \\\n",
- "0 假 谣言 宁波市防控办对网传说法辟谣:扫场所码是为方便流调工作,确保一旦发现阳性病例,密接、次密接、时... \n",
- "1 假 疑似诈骗 10月4日,经与太原市反诈骗中心核实,附有查询链接的该短信为诈骗链接,点击后会跳转至某钓鱼网... \n",
- "2 假 谣言 所谓“持红码到酒吧蹦迪”的说法系误传。根据上海警方调查,视频中出现的红码图片实为两名当事人存... \n",
- "3 假 谣言 吐鲁番市农业农村局、林草局等相关部门核实,有关部门未采取过将滞留人员留在本地就业采摘葡萄的措... \n",
- "4 假 谣言 人群中肺结节的检出率其实并不低,绝大多数肺结节是良性的;肺结节除了关注大小以外,还应当关注数... \n",
+ "0 假 谣言 新京报记者致电北京协和医院,工作人员表示,该患者按照流程操作进行诊断和治疗,没有出逃。\\n该... \n",
+ "1 假 谣言 京天成这次通报成功研制的抗体叫“2019冠状病毒N蛋白抗体”,理论上可以识别新型冠状病毒,以... \n",
+ "2 假 谣言 口罩正确的戴法是,有颜色的那一面(通常是绿色、蓝色或者粉红色)应该朝外,白色的那一面朝内。无... \n",
+ "3 假 谣言 这个装置学名叫隔离担架,主要用途是转运传染性疾病患者或者疑似患者,避免在转运过程中发生继发性... \n",
+ "4 假 伪科学 农业上确实有在大棚中燃烧硫磺杀灭害虫细菌的做法,但没有将硫化物用于医疗环境中的做法,因为硫化... \n",
"\n",
- " tag type videourl \\\n",
- "0 [场所码, 密接] 1 \n",
- "1 [短信, 诈骗] 1 \n",
- "2 [红码, 蹦迪] 1 \n",
- "3 [新疆, 游客] 1 \n",
- "4 [新冠疫苗, 肺结节] 1 \n",
+ " tag type videourl \\\n",
+ "0 [协和医院, 新型冠状病毒] 1 \n",
+ "1 [抗体, 新型冠状病毒] 1 \n",
+ "2 [口罩, 新型冠状病毒] 1 \n",
+ "3 [隔离, 传染] 1 \n",
+ "4 [烟花爆竹, 瘟疫] 1 \n",
"\n",
" cover \\\n",
- "0 //jiaozhen-70111.picnjc.qpic.cn/x8kmEe2UrVaozy... \n",
- "1 //jiaozhen-70111.picnjc.qpic.cn/snc972bZU4sMFX... \n",
- "2 //jiaozhen-70111.picnjc.qpic.cn/7BKjGqTcXywwnz... \n",
- "3 //jiaozhen-70111.picnjc.qpic.cn/iwStcGMpqU94pY... \n",
- "4 //jiaozhen-70111.picnjc.qpic.cn/qXboJt4mr1JRiD... \n",
+ "0 //jiaozhen-70111.picnjc.qpic.cn/1d25062126f0b8... \n",
+ "1 //jiaozhen-70111.picnjc.qpic.cn/f0a11b7c9a84ef... \n",
+ "2 //jiaozhen-70111.picnjc.qpic.cn/61bb516ad6174f... \n",
+ "3 //jiaozhen-70111.picnjc.qpic.cn/b0d32b60f5e90b... \n",
+ "4 //jiaozhen-70111.picnjc.qpic.cn/814be59fed9db8... \n",
"\n",
" coverrect \\\n",
- "0 //jiaozhen-70111.picnjc.qpic.cn/x8kmEe2UrVaozy... \n",
- "1 //jiaozhen-70111.picnjc.qpic.cn/snc972bZU4sMFX... \n",
- "2 //jiaozhen-70111.picnjc.qpic.cn/7BKjGqTcXywwnz... \n",
- "3 //jiaozhen-70111.picnjc.qpic.cn/iwStcGMpqU94pY... \n",
- "4 //jiaozhen-70111.picnjc.qpic.cn/qXboJt4mr1JRiD... \n",
+ "0 //jiaozhen-70111.picnjc.qpic.cn/1d25062126f0b8... \n",
+ "1 //jiaozhen-70111.picnjc.qpic.cn/f0a11b7c9a84ef... \n",
+ "2 //jiaozhen-70111.picnjc.qpic.cn/61bb516ad6174f... \n",
+ "3 //jiaozhen-70111.picnjc.qpic.cn/b0d32b60f5e90b... \n",
+ "4 //jiaozhen-70111.picnjc.qpic.cn/814be59fed9db8... \n",
"\n",
" coversqual section iscolled arttype \n",
- "0 //jiaozhen-70111.picnjc.qpic.cn/x8kmEe2UrVaozy... False normal \n",
- "1 //jiaozhen-70111.picnjc.qpic.cn/snc972bZU4sMFX... False normal \n",
- "2 //jiaozhen-70111.picnjc.qpic.cn/7BKjGqTcXywwnz... False normal \n",
- "3 //jiaozhen-70111.picnjc.qpic.cn/iwStcGMpqU94pY... False normal \n",
- "4 //jiaozhen-70111.picnjc.qpic.cn/qXboJt4mr1JRiD... False normal "
+ "0 //jiaozhen-70111.picnjc.qpic.cn/1d25062126f0b8... False normal \n",
+ "1 //jiaozhen-70111.picnjc.qpic.cn/f0a11b7c9a84ef... False normal \n",
+ "2 //jiaozhen-70111.picnjc.qpic.cn/61bb516ad6174f... False normal \n",
+ "3 //jiaozhen-70111.picnjc.qpic.cn/b0d32b60f5e90b... False normal \n",
+ "4 //jiaozhen-70111.picnjc.qpic.cn/814be59fed9db8... False normal "
]
},
"execution_count": 12,
@@ -543,11 +604,11 @@
},
{
"cell_type": "code",
- "execution_count": 34,
+ "execution_count": 13,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-05-15T03:46:47.928860Z",
- "start_time": "2021-05-15T03:46:47.549263Z"
+ "end_time": "2023-10-27T07:52:11.696359Z",
+ "start_time": "2023-10-27T07:52:11.256654Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -555,7 +616,7 @@
},
"outputs": [],
"source": [
- "df.to_excel('./data/vpqq2022-11-1.xlsx')"
+ "df.to_excel('./data/vpqq2023-10-27.xlsx')"
]
},
{
diff --git a/04-crawler-gov-report.ipynb b/04-crawler-gov-report.ipynb
index 7a4defa..b53c671 100644
--- a/04-crawler-gov-report.ipynb
+++ b/04-crawler-gov-report.ipynb
@@ -198,7 +198,7 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:34:43.405715Z",
@@ -227,7 +227,7 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:35:21.742972Z",
@@ -244,7 +244,7 @@
"53"
]
},
- "execution_count": 24,
+ "execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
@@ -255,7 +255,7 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
@@ -264,7 +264,7 @@
"'http://www.hprc.org.cn/wxzl/wxysl/lczf/'"
]
},
- "execution_count": 25,
+ "execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
@@ -275,7 +275,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:35:26.389635Z",
@@ -292,7 +292,7 @@
"'./dishiyijie_10/200908/t20090818_3955459.html'"
]
},
- "execution_count": 9,
+ "execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
@@ -331,7 +331,7 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:35:52.130583Z",
@@ -356,7 +356,7 @@
},
{
"cell_type": "code",
- "execution_count": 28,
+ "execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:36:35.683836Z",
@@ -377,14 +377,14 @@
" 'http://www.hprc.org.cn/wxzl/wxysl/lczf/dssjqgrmdbdh_1/201803/t20180323_4240852.html']"
]
},
- "execution_count": 28,
+ "execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hyperlinks = [url + i['href'].split('./')[1] for i in links]\n",
- "hyperlinks[:5]"
+ "hyperlinks[:5] "
]
},
{
@@ -421,7 +421,7 @@
},
{
"cell_type": "code",
- "execution_count": 29,
+ "execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:36:51.848212Z",
@@ -465,7 +465,7 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:39:57.985895Z",
@@ -490,7 +490,7 @@
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:40:02.091527Z",
@@ -543,7 +543,7 @@
"\t"
]
},
- "execution_count": 31,
+ "execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
@@ -554,7 +554,7 @@
},
{
"cell_type": "code",
- "execution_count": 38,
+ "execution_count": 13,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:40:18.673197Z",
@@ -571,7 +571,7 @@
"'\\n\\tvar currentPage = 0;//所在页从0开始\\n\\tvar prevPage = currentPage-1//上一页\\n\\tvar 下一页Page = currentPage+1//下一页\\n\\tvar countPage = 4//共多少页\\n\\t//document.write(\"共\"+countPage+\"页 \");\\n\\t\\n\\t//循环\\n\\tvar num = 17;\\n\\tfor(var i=0+(currentPage-1-(currentPage-1)%num) ; i<=(num+(currentPage-1-(currentPage-1)%num))&&(i1){\\n\\t\\t\\tif(currentPage==i)\\n\\t\\t\\t\\tdocument.write(\"【\"+(i+1)+\"】 \");\\n\\t\\t\\telse if(i==0)\\n\\t\\t\\t\\tdocument.write(\"【\"+(i+1)+\"】 \");\\n\\t\\t\\telse\\n\\t\\t\\t\\tdocument.write(\"【\"+(i+1)+\"】 \");\\n\\t\\t}\\t\\n\\t}\\n\\t\\n\\tdocument.write(\"
\");\\n\\t//设置上一页代码\\n\\tif(countPage>1&¤tPage!=0&¤tPage!=1)\\n\\t\\tdocument.write(\"上一页 \");\\n\\telse if(countPage>1&¤tPage!=0&¤tPage==1)\\n\\t\\tdocument.write(\"上一页 \");\\n\\t//else\\n\\t//\\tdocument.write(\"上一页 \");\\n\\t\\n\\t\\n\\t//设置下一页代码 \\n\\tif(countPage>1&¤tPage!=(countPage-1))\\n\\t\\tdocument.write(\"下一页 \");\\n\\t//else\\n\\t//\\tdocument.write(\"下一页 \");\\n\\t\\t\\t\\t\\t \\n\\t'"
]
},
- "execution_count": 38,
+ "execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
@@ -582,7 +582,7 @@
},
{
"cell_type": "code",
- "execution_count": 39,
+ "execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:40:37.548831Z",
@@ -599,7 +599,7 @@
"4"
]
},
- "execution_count": 39,
+ "execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
@@ -615,7 +615,7 @@
},
{
"cell_type": "code",
- "execution_count": 40,
+ "execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:48:16.422277Z",
@@ -746,7 +746,7 @@
},
{
"cell_type": "code",
- "execution_count": 49,
+ "execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2021-11-01T06:52:35.977662Z",
@@ -766,7 +766,7 @@
}
],
"source": [
- "# 抓取52年政府工作报告内容\n",
+ "# 抓取53年政府工作报告内容\n",
"reports = {}\n",
"for link in hyperlinks:\n",
" year, report = crawler(link)\n",
diff --git a/04-crawler-netease-music.ipynb b/04-crawler-netease-music.ipynb
index 78b5123..344c31f 100644
--- a/04-crawler-netease-music.ipynb
+++ b/04-crawler-netease-music.ipynb
@@ -1595,7 +1595,7 @@
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
@@ -1609,7 +1609,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.6"
+ "version": "3.9.7"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
diff --git a/04-crawler-pyppeteer.ipynb b/04-crawler-pyppeteer.ipynb
index 94f366f..b72f910 100644
--- a/04-crawler-pyppeteer.ipynb
+++ b/04-crawler-pyppeteer.ipynb
@@ -34,8 +34,8 @@
"execution_count": 1,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T05:51:15.654438Z",
- "start_time": "2021-11-01T05:51:14.623926Z"
+ "end_time": "2023-11-10T07:37:10.580652Z",
+ "start_time": "2023-11-10T07:37:06.822664Z"
},
"slideshow": {
"slide_type": "slide"
@@ -46,12 +46,14 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Requirement already satisfied: pyppeteer in /usr/local/lib/python3.7/site-packages (0.0.25)\n",
- "Requirement already satisfied: urllib3 in /usr/local/lib/python3.7/site-packages (from pyppeteer) (1.25.8)\n",
- "Requirement already satisfied: tqdm in /usr/local/lib/python3.7/site-packages (from pyppeteer) (4.43.0)\n",
- "Requirement already satisfied: appdirs in /usr/local/lib/python3.7/site-packages (from pyppeteer) (1.4.3)\n",
- "Requirement already satisfied: pyee in /usr/local/lib/python3.7/site-packages (from pyppeteer) (7.0.1)\n",
- "Requirement already satisfied: websockets in /usr/local/lib/python3.7/site-packages (from pyppeteer) (8.1)\n"
+ "Requirement already satisfied: pyppeteer in /opt/anaconda3/lib/python3.9/site-packages (0.2.6)\n",
+ "Requirement already satisfied: importlib-metadata>=1.4 in /opt/anaconda3/lib/python3.9/site-packages (from pyppeteer) (4.8.1)\n",
+ "Requirement already satisfied: pyee<9.0.0,>=8.1.0 in /opt/anaconda3/lib/python3.9/site-packages (from pyppeteer) (8.2.2)\n",
+ "Requirement already satisfied: websockets<10.0,>=9.1 in /opt/anaconda3/lib/python3.9/site-packages (from pyppeteer) (9.1)\n",
+ "Requirement already satisfied: urllib3<2.0.0,>=1.25.8 in /opt/anaconda3/lib/python3.9/site-packages (from pyppeteer) (1.26.7)\n",
+ "Requirement already satisfied: appdirs<2.0.0,>=1.4.3 in /opt/anaconda3/lib/python3.9/site-packages (from pyppeteer) (1.4.4)\n",
+ "Requirement already satisfied: tqdm<5.0.0,>=4.42.1 in /opt/anaconda3/lib/python3.9/site-packages (from pyppeteer) (4.62.3)\n",
+ "Requirement already satisfied: zipp>=0.5 in /opt/anaconda3/lib/python3.9/site-packages (from importlib-metadata>=1.4->pyppeteer) (3.6.0)\n"
]
}
],
@@ -64,8 +66,8 @@
"execution_count": 2,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T05:53:46.602755Z",
- "start_time": "2021-11-01T05:53:44.531019Z"
+ "end_time": "2023-11-10T07:37:19.492209Z",
+ "start_time": "2023-11-10T07:37:18.849892Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -78,11 +80,11 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 3,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T05:53:12.368791Z",
- "start_time": "2021-11-01T05:53:07.308917Z"
+ "end_time": "2023-11-10T07:37:31.500773Z",
+ "start_time": "2023-11-10T07:37:27.383711Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -94,12 +96,12 @@
"output_type": "stream",
"text": [
"Collecting pyquery\n",
- " Using cached pyquery-1.4.3-py3-none-any.whl (22 kB)\n",
- "Requirement already satisfied: lxml>=2.1 in /opt/anaconda3/lib/python3.7/site-packages (from pyquery) (4.6.1)\n",
- "Collecting cssselect>0.7.9\n",
- " Using cached cssselect-1.1.0-py2.py3-none-any.whl (16 kB)\n",
+ " Downloading pyquery-2.0.0-py3-none-any.whl (22 kB)\n",
+ "Collecting cssselect>=1.2.0\n",
+ " Downloading cssselect-1.2.0-py2.py3-none-any.whl (18 kB)\n",
+ "Requirement already satisfied: lxml>=2.1 in /opt/anaconda3/lib/python3.9/site-packages (from pyquery) (4.6.3)\n",
"Installing collected packages: cssselect, pyquery\n",
- "Successfully installed cssselect-1.1.0 pyquery-1.4.3\n"
+ "Successfully installed cssselect-1.2.0 pyquery-2.0.0\n"
]
}
],
@@ -157,11 +159,11 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 4,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T05:53:43.227456Z",
- "start_time": "2021-11-01T05:53:43.222481Z"
+ "end_time": "2023-11-10T07:41:27.744695Z",
+ "start_time": "2023-11-10T07:41:27.736764Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -175,11 +177,11 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 5,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T05:53:46.602755Z",
- "start_time": "2021-11-01T05:53:44.531019Z"
+ "end_time": "2023-11-10T07:42:03.418609Z",
+ "start_time": "2023-11-10T07:41:56.628319Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -571,7 +573,6 @@
]
},
{
- "attachments": {},
"cell_type": "markdown",
"metadata": {
"slideshow": {
@@ -613,11 +614,11 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 6,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T09:43:08.925151Z",
- "start_time": "2021-11-01T09:41:19.291522Z"
+ "end_time": "2023-11-10T07:50:50.757092Z",
+ "start_time": "2023-11-10T07:49:06.761981Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -644,7 +645,7 @@
"cell_type": "markdown",
"metadata": {
"slideshow": {
- "slide_type": "skip"
+ "slide_type": "slide"
}
},
"source": [
@@ -656,11 +657,11 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 7,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T09:45:00.401082Z",
- "start_time": "2021-11-01T09:43:18.351533Z"
+ "end_time": "2023-11-10T07:53:13.275552Z",
+ "start_time": "2023-11-10T07:51:29.343728Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -704,7 +705,7 @@
"metadata": {
"celltoolbar": "幻灯片",
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
@@ -718,7 +719,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.6"
+ "version": "3.9.7"
},
"toc": {
"base_numbering": 1,
@@ -731,7 +732,7 @@
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
- "toc_window_display": true
+ "toc_window_display": false
}
},
"nbformat": 4,
diff --git a/04-crawler-selenium.ipynb b/04-crawler-selenium.ipynb
index a196bed..3ebdf13 100644
--- a/04-crawler-selenium.ipynb
+++ b/04-crawler-selenium.ipynb
@@ -50,11 +50,11 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 1,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T07:07:11.741430Z",
- "start_time": "2021-11-01T07:07:08.367946Z"
+ "end_time": "2023-11-10T06:52:59.660491Z",
+ "start_time": "2023-11-10T06:52:44.173755Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -65,24 +65,37 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Requirement already up-to-date: selenium in /opt/anaconda3/lib/python3.7/site-packages (4.0.0)\n",
- "Requirement already satisfied, skipping upgrade: trio-websocket~=0.9 in /opt/anaconda3/lib/python3.7/site-packages (from selenium) (0.9.2)\n",
- "Requirement already satisfied, skipping upgrade: urllib3[secure]~=1.26 in /opt/anaconda3/lib/python3.7/site-packages (from selenium) (1.26.7)\n",
- "Requirement already satisfied, skipping upgrade: trio~=0.17 in /opt/anaconda3/lib/python3.7/site-packages (from selenium) (0.19.0)\n",
- "Requirement already satisfied, skipping upgrade: wsproto>=0.14 in /opt/anaconda3/lib/python3.7/site-packages (from trio-websocket~=0.9->selenium) (1.0.0)\n",
- "Requirement already satisfied, skipping upgrade: async-generator>=1.10 in /opt/anaconda3/lib/python3.7/site-packages (from trio-websocket~=0.9->selenium) (1.10)\n",
- "Requirement already satisfied, skipping upgrade: certifi; extra == \"secure\" in /opt/anaconda3/lib/python3.7/site-packages (from urllib3[secure]~=1.26->selenium) (2019.11.28)\n",
- "Requirement already satisfied, skipping upgrade: idna>=2.0.0; extra == \"secure\" in /opt/anaconda3/lib/python3.7/site-packages (from urllib3[secure]~=1.26->selenium) (2.8)\n",
- "Requirement already satisfied, skipping upgrade: cryptography>=1.3.4; extra == \"secure\" in /opt/anaconda3/lib/python3.7/site-packages (from urllib3[secure]~=1.26->selenium) (2.8)\n",
- "Requirement already satisfied, skipping upgrade: pyOpenSSL>=0.14; extra == \"secure\" in /opt/anaconda3/lib/python3.7/site-packages (from urllib3[secure]~=1.26->selenium) (19.1.0)\n",
- "Requirement already satisfied, skipping upgrade: outcome in /opt/anaconda3/lib/python3.7/site-packages (from trio~=0.17->selenium) (1.1.0)\n",
- "Requirement already satisfied, skipping upgrade: sortedcontainers in /opt/anaconda3/lib/python3.7/site-packages (from trio~=0.17->selenium) (2.1.0)\n",
- "Requirement already satisfied, skipping upgrade: sniffio in /opt/anaconda3/lib/python3.7/site-packages (from trio~=0.17->selenium) (1.2.0)\n",
- "Requirement already satisfied, skipping upgrade: attrs>=19.2.0 in /opt/anaconda3/lib/python3.7/site-packages (from trio~=0.17->selenium) (21.2.0)\n",
- "Requirement already satisfied, skipping upgrade: h11<1,>=0.9.0 in /opt/anaconda3/lib/python3.7/site-packages (from wsproto>=0.14->trio-websocket~=0.9->selenium) (0.12.0)\n",
- "Requirement already satisfied, skipping upgrade: cffi!=1.11.3,>=1.8 in /opt/anaconda3/lib/python3.7/site-packages (from cryptography>=1.3.4; extra == \"secure\"->urllib3[secure]~=1.26->selenium) (1.14.0)\n",
- "Requirement already satisfied, skipping upgrade: six>=1.4.1 in /opt/anaconda3/lib/python3.7/site-packages (from cryptography>=1.3.4; extra == \"secure\"->urllib3[secure]~=1.26->selenium) (1.12.0)\n",
- "Requirement already satisfied, skipping upgrade: pycparser in /opt/anaconda3/lib/python3.7/site-packages (from cffi!=1.11.3,>=1.8->cryptography>=1.3.4; extra == \"secure\"->urllib3[secure]~=1.26->selenium) (2.19)\n",
+ "Collecting selenium\n",
+ " Downloading selenium-4.15.2-py3-none-any.whl (10.2 MB)\n",
+ "\u001b[K |████████████████████████████████| 10.2 MB 857 kB/s eta 0:00:01\n",
+ "\u001b[?25hCollecting trio~=0.17\n",
+ " Downloading trio-0.23.1-py3-none-any.whl (448 kB)\n",
+ "\u001b[K |████████████████████████████████| 448 kB 3.2 MB/s eta 0:00:01\n",
+ "\u001b[?25hRequirement already satisfied: certifi>=2021.10.8 in /opt/anaconda3/lib/python3.9/site-packages (from selenium) (2021.10.8)\n",
+ "Requirement already satisfied: urllib3[socks]<3,>=1.26 in /opt/anaconda3/lib/python3.9/site-packages (from selenium) (1.26.7)\n",
+ "Collecting trio-websocket~=0.9\n",
+ " Downloading trio_websocket-0.11.1-py3-none-any.whl (17 kB)\n",
+ "Collecting sniffio>=1.3.0\n",
+ " Downloading sniffio-1.3.0-py3-none-any.whl (10 kB)\n",
+ "Collecting exceptiongroup>=1.0.0rc9\n",
+ " Downloading exceptiongroup-1.1.3-py3-none-any.whl (14 kB)\n",
+ "Collecting outcome\n",
+ " Downloading outcome-1.3.0.post0-py2.py3-none-any.whl (10 kB)\n",
+ "Requirement already satisfied: idna in /opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium) (3.2)\n",
+ "Requirement already satisfied: attrs>=20.1.0 in /opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium) (21.2.0)\n",
+ "Requirement already satisfied: sortedcontainers in /opt/anaconda3/lib/python3.9/site-packages (from trio~=0.17->selenium) (2.4.0)\n",
+ "Collecting wsproto>=0.14\n",
+ " Downloading wsproto-1.2.0-py3-none-any.whl (24 kB)\n",
+ "Requirement already satisfied: PySocks!=1.5.7,<2.0,>=1.5.6 in /opt/anaconda3/lib/python3.9/site-packages (from urllib3[socks]<3,>=1.26->selenium) (1.7.1)\n",
+ "Collecting h11<1,>=0.9.0\n",
+ " Downloading h11-0.14.0-py3-none-any.whl (58 kB)\n",
+ "\u001b[K |████████████████████████████████| 58 kB 3.9 MB/s eta 0:00:011\n",
+ "\u001b[?25hInstalling collected packages: sniffio, outcome, h11, exceptiongroup, wsproto, trio, trio-websocket, selenium\n",
+ " Attempting uninstall: sniffio\n",
+ " Found existing installation: sniffio 1.2.0\n",
+ " Uninstalling sniffio-1.2.0:\n",
+ " Successfully uninstalled sniffio-1.2.0\n",
+ "Successfully installed exceptiongroup-1.1.3 h11-0.14.0 outcome-1.3.0.post0 selenium-4.15.2 sniffio-1.3.0 trio-0.23.1 trio-websocket-0.11.1 wsproto-1.2.0\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
@@ -107,11 +120,11 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 2,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T07:07:57.504637Z",
- "start_time": "2021-11-01T07:07:57.475289Z"
+ "end_time": "2023-11-10T06:53:35.389804Z",
+ "start_time": "2023-11-10T06:53:35.311442Z"
},
"slideshow": {
"slide_type": "fragment"
@@ -127,8 +140,8 @@
"execution_count": 3,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-05-15T06:47:37.397766Z",
- "start_time": "2021-05-15T06:47:37.391588Z"
+ "end_time": "2023-11-10T06:53:40.996604Z",
+ "start_time": "2023-11-10T06:53:40.886777Z"
},
"scrolled": true,
"slideshow": {
@@ -164,25 +177,7570 @@
" # under the License.\n",
"\n",
"PACKAGE CONTENTS\n",
- " android (package)\n",
- " blackberry (package)\n",
" chrome (package)\n",
+ " chromium (package)\n",
" common (package)\n",
" edge (package)\n",
" firefox (package)\n",
" ie (package)\n",
- " opera (package)\n",
- " phantomjs (package)\n",
" remote (package)\n",
" safari (package)\n",
" support (package)\n",
" webkitgtk (package)\n",
+ " wpewebkit (package)\n",
+ "\n",
+ "CLASSES\n",
+ " builtins.object\n",
+ " selenium.webdriver.common.action_chains.ActionChains\n",
+ " selenium.webdriver.common.desired_capabilities.DesiredCapabilities\n",
+ " selenium.webdriver.common.keys.Keys\n",
+ " selenium.webdriver.common.proxy.Proxy\n",
+ " selenium.webdriver.firefox.firefox_profile.FirefoxProfile\n",
+ " selenium.webdriver.chromium.options.ChromiumOptions(selenium.webdriver.common.options.ArgOptions)\n",
+ " selenium.webdriver.chrome.options.Options\n",
+ " selenium.webdriver.edge.options.Options\n",
+ " selenium.webdriver.chromium.service.ChromiumService(selenium.webdriver.common.service.Service)\n",
+ " selenium.webdriver.chrome.service.Service\n",
+ " selenium.webdriver.edge.service.Service\n",
+ " selenium.webdriver.chromium.webdriver.ChromiumDriver(selenium.webdriver.remote.webdriver.WebDriver)\n",
+ " selenium.webdriver.chrome.webdriver.WebDriver\n",
+ " selenium.webdriver.edge.webdriver.WebDriver\n",
+ " selenium.webdriver.common.options.ArgOptions(selenium.webdriver.common.options.BaseOptions)\n",
+ " selenium.webdriver.firefox.options.Options\n",
+ " selenium.webdriver.ie.options.Options\n",
+ " selenium.webdriver.safari.options.Options\n",
+ " selenium.webdriver.webkitgtk.options.Options\n",
+ " selenium.webdriver.wpewebkit.options.Options\n",
+ " selenium.webdriver.common.service.Service(abc.ABC)\n",
+ " selenium.webdriver.firefox.service.Service\n",
+ " selenium.webdriver.ie.service.Service\n",
+ " selenium.webdriver.safari.service.Service\n",
+ " selenium.webdriver.webkitgtk.service.Service\n",
+ " selenium.webdriver.wpewebkit.service.Service\n",
+ " selenium.webdriver.remote.webdriver.BaseWebDriver(builtins.object)\n",
+ " selenium.webdriver.remote.webdriver.WebDriver\n",
+ " selenium.webdriver.firefox.webdriver.WebDriver\n",
+ " selenium.webdriver.ie.webdriver.WebDriver\n",
+ " selenium.webdriver.safari.webdriver.WebDriver\n",
+ " selenium.webdriver.webkitgtk.webdriver.WebDriver\n",
+ " selenium.webdriver.wpewebkit.webdriver.WebDriver\n",
+ " \n",
+ " class ActionChains(builtins.object)\n",
+ " | ActionChains(driver: 'WebDriver', duration: 'int' = 250, devices: 'list[AnyDevice] | None' = None) -> 'None'\n",
+ " | \n",
+ " | ActionChains are a way to automate low level interactions such as mouse\n",
+ " | movements, mouse button actions, key press, and context menu interactions.\n",
+ " | This is useful for doing more complex actions like hover over and drag and\n",
+ " | drop.\n",
+ " | \n",
+ " | Generate user actions.\n",
+ " | When you call methods for actions on the ActionChains object,\n",
+ " | the actions are stored in a queue in the ActionChains object.\n",
+ " | When you call perform(), the events are fired in the order they\n",
+ " | are queued up.\n",
+ " | \n",
+ " | ActionChains can be used in a chain pattern::\n",
+ " | \n",
+ " | menu = driver.find_element(By.CSS_SELECTOR, \".nav\")\n",
+ " | hidden_submenu = driver.find_element(By.CSS_SELECTOR, \".nav #submenu1\")\n",
+ " | \n",
+ " | ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()\n",
+ " | \n",
+ " | Or actions can be queued up one by one, then performed.::\n",
+ " | \n",
+ " | menu = driver.find_element(By.CSS_SELECTOR, \".nav\")\n",
+ " | hidden_submenu = driver.find_element(By.CSS_SELECTOR, \".nav #submenu1\")\n",
+ " | \n",
+ " | actions = ActionChains(driver)\n",
+ " | actions.move_to_element(menu)\n",
+ " | actions.click(hidden_submenu)\n",
+ " | actions.perform()\n",
+ " | \n",
+ " | Either way, the actions are performed in the order they are called, one after\n",
+ " | another.\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __enter__(self) -> 'ActionChains'\n",
+ " | \n",
+ " | __exit__(self, _type, _value, _traceback) -> 'None'\n",
+ " | \n",
+ " | __init__(self, driver: 'WebDriver', duration: 'int' = 250, devices: 'list[AnyDevice] | None' = None) -> 'None'\n",
+ " | Creates a new ActionChains.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver: The WebDriver instance which performs user actions.\n",
+ " | - duration: override the default 250 msecs of DEFAULT_MOVE_DURATION in PointerInput\n",
+ " | \n",
+ " | click(self, on_element: 'WebElement | None' = None) -> 'ActionChains'\n",
+ " | Clicks an element.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - on_element: The element to click.\n",
+ " | If None, clicks on current mouse position.\n",
+ " | \n",
+ " | click_and_hold(self, on_element: 'WebElement | None' = None) -> 'ActionChains'\n",
+ " | Holds down the left mouse button on an element.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - on_element: The element to mouse down.\n",
+ " | If None, clicks on current mouse position.\n",
+ " | \n",
+ " | context_click(self, on_element: 'WebElement | None' = None) -> 'ActionChains'\n",
+ " | Performs a context-click (right click) on an element.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - on_element: The element to context-click.\n",
+ " | If None, clicks on current mouse position.\n",
+ " | \n",
+ " | double_click(self, on_element: 'WebElement | None' = None) -> 'ActionChains'\n",
+ " | Double-clicks an element.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - on_element: The element to double-click.\n",
+ " | If None, clicks on current mouse position.\n",
+ " | \n",
+ " | drag_and_drop(self, source: 'WebElement', target: 'WebElement') -> 'ActionChains'\n",
+ " | Holds down the left mouse button on the source element, then moves\n",
+ " | to the target element and releases the mouse button.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - source: The element to mouse down.\n",
+ " | - target: The element to mouse up.\n",
+ " | \n",
+ " | drag_and_drop_by_offset(self, source: 'WebElement', xoffset: 'int', yoffset: 'int') -> 'ActionChains'\n",
+ " | Holds down the left mouse button on the source element, then moves\n",
+ " | to the target offset and releases the mouse button.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - source: The element to mouse down.\n",
+ " | - xoffset: X offset to move to.\n",
+ " | - yoffset: Y offset to move to.\n",
+ " | \n",
+ " | key_down(self, value: 'str', element: 'WebElement | None' = None) -> 'ActionChains'\n",
+ " | Sends a key press only, without releasing it. Should only be used\n",
+ " | with modifier keys (Control, Alt and Shift).\n",
+ " | \n",
+ " | :Args:\n",
+ " | - value: The modifier key to send. Values are defined in `Keys` class.\n",
+ " | - element: The element to send keys.\n",
+ " | If None, sends a key to current focused element.\n",
+ " | \n",
+ " | Example, pressing ctrl+c::\n",
+ " | \n",
+ " | ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()\n",
+ " | \n",
+ " | key_up(self, value: 'str', element: 'WebElement | None' = None) -> 'ActionChains'\n",
+ " | Releases a modifier key.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - value: The modifier key to send. Values are defined in Keys class.\n",
+ " | - element: The element to send keys.\n",
+ " | If None, sends a key to current focused element.\n",
+ " | \n",
+ " | Example, pressing ctrl+c::\n",
+ " | \n",
+ " | ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()\n",
+ " | \n",
+ " | move_by_offset(self, xoffset: 'int', yoffset: 'int') -> 'ActionChains'\n",
+ " | Moving the mouse to an offset from current mouse position.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - xoffset: X offset to move to, as a positive or negative integer.\n",
+ " | - yoffset: Y offset to move to, as a positive or negative integer.\n",
+ " | \n",
+ " | move_to_element(self, to_element: 'WebElement') -> 'ActionChains'\n",
+ " | Moving the mouse to the middle of an element.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - to_element: The WebElement to move to.\n",
+ " | \n",
+ " | move_to_element_with_offset(self, to_element: 'WebElement', xoffset: 'int', yoffset: 'int') -> 'ActionChains'\n",
+ " | Move the mouse by an offset of the specified element. Offsets are\n",
+ " | relative to the in-view center point of the element.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - to_element: The WebElement to move to.\n",
+ " | - xoffset: X offset to move to, as a positive or negative integer.\n",
+ " | - yoffset: Y offset to move to, as a positive or negative integer.\n",
+ " | \n",
+ " | pause(self, seconds: 'float | int') -> 'ActionChains'\n",
+ " | Pause all inputs for the specified duration in seconds.\n",
+ " | \n",
+ " | perform(self) -> 'None'\n",
+ " | Performs all stored actions.\n",
+ " | \n",
+ " | release(self, on_element: 'WebElement | None' = None) -> 'ActionChains'\n",
+ " | Releasing a held mouse button on an element.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - on_element: The element to mouse up.\n",
+ " | If None, releases on current mouse position.\n",
+ " | \n",
+ " | reset_actions(self) -> 'None'\n",
+ " | Clears actions that are already stored locally and on the remote\n",
+ " | end.\n",
+ " | \n",
+ " | scroll_by_amount(self, delta_x: 'int', delta_y: 'int') -> 'ActionChains'\n",
+ " | Scrolls by provided amounts with the origin in the top left corner\n",
+ " | of the viewport.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - delta_x: Distance along X axis to scroll using the wheel. A negative value scrolls left.\n",
+ " | - delta_y: Distance along Y axis to scroll using the wheel. A negative value scrolls up.\n",
+ " | \n",
+ " | scroll_from_origin(self, scroll_origin: 'ScrollOrigin', delta_x: 'int', delta_y: 'int') -> 'ActionChains'\n",
+ " | Scrolls by provided amount based on a provided origin. The scroll\n",
+ " | origin is either the center of an element or the upper left of the\n",
+ " | viewport plus any offsets. If the origin is an element, and the element\n",
+ " | is not in the viewport, the bottom of the element will first be\n",
+ " | scrolled to the bottom of the viewport.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - origin: Where scroll originates (viewport or element center) plus provided offsets.\n",
+ " | - delta_x: Distance along X axis to scroll using the wheel. A negative value scrolls left.\n",
+ " | - delta_y: Distance along Y axis to scroll using the wheel. A negative value scrolls up.\n",
+ " | \n",
+ " | :Raises: If the origin with offset is outside the viewport.\n",
+ " | - MoveTargetOutOfBoundsException - If the origin with offset is outside the viewport.\n",
+ " | \n",
+ " | scroll_to_element(self, element: 'WebElement') -> 'ActionChains'\n",
+ " | If the element is outside the viewport, scrolls the bottom of the\n",
+ " | element to the bottom of the viewport.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - element: Which element to scroll into the viewport.\n",
+ " | \n",
+ " | send_keys(self, *keys_to_send: 'str') -> 'ActionChains'\n",
+ " | Sends keys to current focused element.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - keys_to_send: The keys to send. Modifier keys constants can be found in the\n",
+ " | 'Keys' class.\n",
+ " | \n",
+ " | send_keys_to_element(self, element: 'WebElement', *keys_to_send: 'str') -> 'ActionChains'\n",
+ " | Sends keys to an element.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - element: The element to send keys.\n",
+ " | - keys_to_send: The keys to send. Modifier keys constants can be found in the\n",
+ " | 'Keys' class.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " Chrome = class WebDriver(selenium.webdriver.chromium.webdriver.ChromiumDriver)\n",
+ " | Chrome(options: selenium.webdriver.chrome.options.Options = None, service: selenium.webdriver.chrome.service.Service = None, keep_alive: bool = True) -> None\n",
+ " | \n",
+ " | Controls the ChromeDriver and allows you to drive the browser.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | WebDriver\n",
+ " | selenium.webdriver.chromium.webdriver.ChromiumDriver\n",
+ " | selenium.webdriver.remote.webdriver.WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.BaseWebDriver\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, options: selenium.webdriver.chrome.options.Options = None, service: selenium.webdriver.chrome.service.Service = None, keep_alive: bool = True) -> None\n",
+ " | Creates a new instance of the chrome driver. Starts the service and\n",
+ " | then creates new instance of chrome driver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - options - this takes an instance of ChromeOptions\n",
+ " | - service - Service object for handling the browser driver if you need to pass extra details\n",
+ " | - keep_alive - Whether to configure ChromeRemoteConnection to use HTTP keep-alive.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.chromium.webdriver.ChromiumDriver:\n",
+ " | \n",
+ " | delete_network_conditions(self) -> None\n",
+ " | Resets Chromium network emulation settings.\n",
+ " | \n",
+ " | execute_cdp_cmd(self, cmd: str, cmd_args: dict)\n",
+ " | Execute Chrome Devtools Protocol command and get returned result The\n",
+ " | command and command args should follow chrome devtools protocol\n",
+ " | domains/commands, refer to link\n",
+ " | https://chromedevtools.github.io/devtools-protocol/\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cmd: A str, command name\n",
+ " | - cmd_args: A dict, command args. empty dict {} if there is no command args\n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': requestId})\n",
+ " | :Returns:\n",
+ " | A dict, empty dict {} if there is no result to return.\n",
+ " | For example to getResponseBody:\n",
+ " | {'base64Encoded': False, 'body': 'response body string'}\n",
+ " | \n",
+ " | get_issue_message(self)\n",
+ " | :Returns: An error message when there is any issue in a Cast\n",
+ " | session.\n",
+ " | \n",
+ " | get_network_conditions(self)\n",
+ " | Gets Chromium network emulation settings.\n",
+ " | \n",
+ " | :Returns: A dict. For example: {'latency': 4,\n",
+ " | 'download_throughput': 2, 'upload_throughput': 2, 'offline':\n",
+ " | False}\n",
+ " | \n",
+ " | get_sinks(self) -> list\n",
+ " | :Returns: A list of sinks available for Cast.\n",
+ " | \n",
+ " | launch_app(self, id)\n",
+ " | Launches Chromium app specified by id.\n",
+ " | \n",
+ " | quit(self) -> None\n",
+ " | Closes the browser and shuts down the ChromiumDriver executable that\n",
+ " | is started when starting the ChromiumDriver.\n",
+ " | \n",
+ " | set_network_conditions(self, **network_conditions) -> None\n",
+ " | Sets Chromium network emulation settings.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - network_conditions: A dict with conditions specification.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_network_conditions(\n",
+ " | offline=False,\n",
+ " | latency=5, # additional latency (ms)\n",
+ " | download_throughput=500 * 1024, # maximal throughput\n",
+ " | upload_throughput=500 * 1024) # maximal throughput\n",
+ " | \n",
+ " | Note: 'throughput' can be used to set both (for download and upload).\n",
+ " | \n",
+ " | set_permissions(self, name: str, value: str) -> None\n",
+ " | Sets Applicable Permission.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - name: The item to set the permission on.\n",
+ " | - value: The value to set on the item\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_permissions('clipboard-read', 'denied')\n",
+ " | \n",
+ " | set_sink_to_use(self, sink_name: str) -> dict\n",
+ " | Sets a specific sink, using its name, as a Cast session receiver\n",
+ " | target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to use as the target.\n",
+ " | \n",
+ " | start_desktop_mirroring(self, sink_name: str) -> dict\n",
+ " | Starts a desktop mirroring session on a specific receiver target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to use as the target.\n",
+ " | \n",
+ " | start_tab_mirroring(self, sink_name: str) -> dict\n",
+ " | Starts a tab mirroring session on a specific receiver target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to use as the target.\n",
+ " | \n",
+ " | stop_casting(self, sink_name: str) -> dict\n",
+ " | Stops the existing Cast session on a specific receiver target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to stop the Cast session.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | __enter__(self)\n",
+ " | \n",
+ " | __exit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], traceback: Optional[traceback])\n",
+ " | \n",
+ " | __repr__(self)\n",
+ " | Return repr(self).\n",
+ " | \n",
+ " | add_cookie(self, cookie_dict) -> None\n",
+ " | Adds a cookie to your current session.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cookie_dict: A dictionary object, with required keys - \"name\" and \"value\";\n",
+ " | optional keys - \"path\", \"domain\", \"secure\", \"httpOnly\", \"expiry\", \"sameSite\"\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure' : True})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'sameSite' : 'Strict'})\n",
+ " | \n",
+ " | add_credential(self, credential: selenium.webdriver.common.virtual_authenticator.Credential) -> None\n",
+ " | Injects a credential into the authenticator.\n",
+ " | \n",
+ " | add_virtual_authenticator(self, options: selenium.webdriver.common.virtual_authenticator.VirtualAuthenticatorOptions) -> None\n",
+ " | Adds a virtual authenticator with the given options.\n",
+ " | \n",
+ " | back(self) -> None\n",
+ " | Goes one step backward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.back()\n",
+ " | \n",
+ " | bidi_connection(self)\n",
+ " | \n",
+ " | close(self) -> None\n",
+ " | Closes the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.close()\n",
+ " | \n",
+ " | create_web_element(self, element_id: str) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Creates a web element with the specified `element_id`.\n",
+ " | \n",
+ " | delete_all_cookies(self) -> None\n",
+ " | Delete all cookies in the scope of the session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_all_cookies()\n",
+ " | \n",
+ " | delete_cookie(self, name) -> None\n",
+ " | Deletes a single cookie with the given name.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_cookie('my_cookie')\n",
+ " | \n",
+ " | delete_downloadable_files(self) -> None\n",
+ " | Deletes all downloadable files.\n",
+ " | \n",
+ " | download_file(self, file_name: str, target_directory: str) -> None\n",
+ " | Downloads a file with the specified file name to the target\n",
+ " | directory.\n",
+ " | \n",
+ " | file_name: The name of the file to download.\n",
+ " | target_directory: The path to the directory to save the downloaded file.\n",
+ " | \n",
+ " | execute(self, driver_command: str, params: dict = None) -> dict\n",
+ " | Sends a command to be executed by a command.CommandExecutor.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver_command: The name of the command to execute as a string.\n",
+ " | - params: A dictionary of named parameters to send with the command.\n",
+ " | \n",
+ " | :Returns:\n",
+ " | The command's JSON response loaded into a dictionary object.\n",
+ " | \n",
+ " | execute_async_script(self, script: str, *args)\n",
+ " | Asynchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | script = \"var callback = arguments[arguments.length - 1]; \" \\\n",
+ " | \"window.setTimeout(function(){ callback('timeout') }, 3000);\"\n",
+ " | driver.execute_async_script(script)\n",
+ " | \n",
+ " | execute_script(self, script, *args)\n",
+ " | Synchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_script('return document.title;')\n",
+ " | \n",
+ " | file_detector_context(self, file_detector_class, *args, **kwargs)\n",
+ " | Overrides the current file detector (if necessary) in limited\n",
+ " | context. Ensures the original file detector is set afterwards.\n",
+ " | \n",
+ " | Example::\n",
+ " | \n",
+ " | with webdriver.file_detector_context(UselessFileDetector):\n",
+ " | someinput.send_keys('/etc/hosts')\n",
+ " | \n",
+ " | :Args:\n",
+ " | - file_detector_class - Class of the desired file detector. If the class is different\n",
+ " | from the current file_detector, then the class is instantiated with args and kwargs\n",
+ " | and used as a file detector during the duration of the context manager.\n",
+ " | - args - Optional arguments that get passed to the file detector class during\n",
+ " | instantiation.\n",
+ " | - kwargs - Keyword arguments, passed the same way as args.\n",
+ " | \n",
+ " | find_element(self, by='id', value: Optional[str] = None) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Find an element given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.find_element(By.ID, 'foo')\n",
+ " | \n",
+ " | :rtype: WebElement\n",
+ " | \n",
+ " | find_elements(self, by='id', value: Optional[str] = None) -> List[selenium.webdriver.remote.webelement.WebElement]\n",
+ " | Find elements given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | elements = driver.find_elements(By.CLASS_NAME, 'foo')\n",
+ " | \n",
+ " | :rtype: list of WebElement\n",
+ " | \n",
+ " | forward(self) -> None\n",
+ " | Goes one step forward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.forward()\n",
+ " | \n",
+ " | fullscreen_window(self) -> None\n",
+ " | Invokes the window manager-specific 'full screen' operation.\n",
+ " | \n",
+ " | get(self, url: str) -> None\n",
+ " | Loads a web page in the current browser session.\n",
+ " | \n",
+ " | get_cookie(self, name) -> Optional[Dict]\n",
+ " | Get a single cookie by name. Returns the cookie if found, None if\n",
+ " | not.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookie('my_cookie')\n",
+ " | \n",
+ " | get_cookies(self) -> List[dict]\n",
+ " | Returns a set of dictionaries, corresponding to cookies visible in\n",
+ " | the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookies()\n",
+ " | \n",
+ " | get_credentials(self) -> List[selenium.webdriver.common.virtual_authenticator.Credential]\n",
+ " | Returns the list of credentials owned by the authenticator.\n",
+ " | \n",
+ " | get_downloadable_files(self) -> dict\n",
+ " | Retrieves the downloadable files as a map of file names and their\n",
+ " | corresponding URLs.\n",
+ " | \n",
+ " | get_log(self, log_type)\n",
+ " | Gets the log for a given log type.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - log_type: type of log that which will be returned\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_log('browser')\n",
+ " | driver.get_log('driver')\n",
+ " | driver.get_log('client')\n",
+ " | driver.get_log('server')\n",
+ " | \n",
+ " | get_pinned_scripts(self) -> List[str]\n",
+ " | \n",
+ " | get_screenshot_as_base64(self) -> str\n",
+ " | Gets the screenshot of the current window as a base64 encoded string\n",
+ " | which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_base64()\n",
+ " | \n",
+ " | get_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_screenshot_as_png(self) -> bytes\n",
+ " | Gets the screenshot of the current window as a binary data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_png()\n",
+ " | \n",
+ " | get_window_position(self, windowHandle='current') -> dict\n",
+ " | Gets the x,y position of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_position()\n",
+ " | \n",
+ " | get_window_rect(self) -> dict\n",
+ " | Gets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_rect()\n",
+ " | \n",
+ " | get_window_size(self, windowHandle: str = 'current') -> dict\n",
+ " | Gets the width and height of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_size()\n",
+ " | \n",
+ " | implicitly_wait(self, time_to_wait: float) -> None\n",
+ " | Sets a sticky timeout to implicitly wait for an element to be found,\n",
+ " | or a command to complete. This method only needs to be called one time\n",
+ " | per session. To set the timeout for calls to execute_async_script, see\n",
+ " | set_script_timeout.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: Amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.implicitly_wait(30)\n",
+ " | \n",
+ " | maximize_window(self) -> None\n",
+ " | Maximizes the current window that webdriver is using.\n",
+ " | \n",
+ " | minimize_window(self) -> None\n",
+ " | Invokes the window manager-specific 'minimize' operation.\n",
+ " | \n",
+ " | pin_script(self, script: str, script_key=None) -> selenium.webdriver.remote.script_key.ScriptKey\n",
+ " | Store common javascript scripts to be executed later by a unique\n",
+ " | hashable ID.\n",
+ " | \n",
+ " | print_page(self, print_options: Optional[selenium.webdriver.common.print_page_options.PrintOptions] = None) -> str\n",
+ " | Takes PDF of the current page.\n",
+ " | \n",
+ " | The driver makes a best effort to return a PDF based on the\n",
+ " | provided parameters.\n",
+ " | \n",
+ " | refresh(self) -> None\n",
+ " | Refreshes the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.refresh()\n",
+ " | \n",
+ " | remove_all_credentials(self) -> None\n",
+ " | Removes all credentials from the authenticator.\n",
+ " | \n",
+ " | remove_credential(self, credential_id: Union[str, bytearray]) -> None\n",
+ " | Removes a credential from the authenticator.\n",
+ " | \n",
+ " | remove_virtual_authenticator(self) -> None\n",
+ " | Removes a previously added virtual authenticator.\n",
+ " | \n",
+ " | The authenticator is no longer valid after removal, so no\n",
+ " | methods may be called.\n",
+ " | \n",
+ " | save_screenshot(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_page_load_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time to wait for a page load to complete before\n",
+ " | throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_page_load_timeout(30)\n",
+ " | \n",
+ " | set_script_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time that the script should wait during an\n",
+ " | execute_async_script call before throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_script_timeout(30)\n",
+ " | \n",
+ " | set_user_verified(self, verified: bool) -> None\n",
+ " | Sets whether the authenticator will simulate success or fail on user\n",
+ " | verification.\n",
+ " | \n",
+ " | verified: True if the authenticator will pass user verification, False otherwise.\n",
+ " | \n",
+ " | set_window_position(self, x, y, windowHandle: str = 'current') -> dict\n",
+ " | Sets the x,y position of the current window. (window.moveTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - x: the x-coordinate in pixels to set the window position\n",
+ " | - y: the y-coordinate in pixels to set the window position\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_position(0,0)\n",
+ " | \n",
+ " | set_window_rect(self, x=None, y=None, width=None, height=None) -> dict\n",
+ " | Sets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window. This method is only supported for W3C compatible\n",
+ " | browsers; other browsers should use `set_window_position` and\n",
+ " | `set_window_size`.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_rect(x=10, y=10)\n",
+ " | driver.set_window_rect(width=100, height=200)\n",
+ " | driver.set_window_rect(x=10, y=10, width=100, height=200)\n",
+ " | \n",
+ " | set_window_size(self, width, height, windowHandle: str = 'current') -> None\n",
+ " | Sets the width and height of the current window. (window.resizeTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - width: the width in pixels to set the window to\n",
+ " | - height: the height in pixels to set the window to\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_size(800,600)\n",
+ " | \n",
+ " | start_client(self)\n",
+ " | Called before starting a new session.\n",
+ " | \n",
+ " | This method may be overridden to define custom startup behavior.\n",
+ " | \n",
+ " | start_session(self, capabilities: dict) -> None\n",
+ " | Creates a new session with the desired capabilities.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - capabilities - a capabilities dict to start the session with.\n",
+ " | \n",
+ " | stop_client(self)\n",
+ " | Called after executing a quit command.\n",
+ " | \n",
+ " | This method may be overridden to define custom shutdown\n",
+ " | behavior.\n",
+ " | \n",
+ " | unpin(self, script_key: selenium.webdriver.remote.script_key.ScriptKey) -> None\n",
+ " | Remove a pinned script from storage.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | application_cache\n",
+ " | Returns a ApplicationCache Object to interact with the browser app\n",
+ " | cache.\n",
+ " | \n",
+ " | capabilities\n",
+ " | Returns the drivers current capabilities being used.\n",
+ " | \n",
+ " | current_url\n",
+ " | Gets the URL of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_url\n",
+ " | \n",
+ " | current_window_handle\n",
+ " | Returns the handle of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_window_handle\n",
+ " | \n",
+ " | desired_capabilities\n",
+ " | Returns the drivers current desired capabilities being used.\n",
+ " | \n",
+ " | log_types\n",
+ " | Gets a list of the available log types. This only works with w3c\n",
+ " | compliant browsers.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.log_types\n",
+ " | \n",
+ " | mobile\n",
+ " | \n",
+ " | name\n",
+ " | Returns the name of the underlying browser for this instance.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | name = driver.name\n",
+ " | \n",
+ " | page_source\n",
+ " | Gets the source of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.page_source\n",
+ " | \n",
+ " | switch_to\n",
+ " | :Returns:\n",
+ " | - SwitchTo: an object containing all options to switch focus into\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.switch_to.active_element\n",
+ " | alert = driver.switch_to.alert\n",
+ " | driver.switch_to.default_content()\n",
+ " | driver.switch_to.frame('frame_name')\n",
+ " | driver.switch_to.frame(1)\n",
+ " | driver.switch_to.frame(driver.find_elements(By.TAG_NAME, \"iframe\")[0])\n",
+ " | driver.switch_to.parent_frame()\n",
+ " | driver.switch_to.window('main')\n",
+ " | \n",
+ " | title\n",
+ " | Returns the title of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | title = driver.title\n",
+ " | \n",
+ " | virtual_authenticator_id\n",
+ " | Returns the id of the virtual authenticator.\n",
+ " | \n",
+ " | window_handles\n",
+ " | Returns the handles of all windows within the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.window_handles\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | file_detector\n",
+ " | \n",
+ " | orientation\n",
+ " | Gets the current orientation of the device.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | orientation = driver.orientation\n",
+ " | \n",
+ " | timeouts\n",
+ " | Get all the timeouts that have been set on the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.timeouts\n",
+ " | :rtype: Timeout\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.BaseWebDriver:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " ChromeOptions = class Options(selenium.webdriver.chromium.options.ChromiumOptions)\n",
+ " | ChromeOptions() -> None\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Options\n",
+ " | selenium.webdriver.chromium.options.ChromiumOptions\n",
+ " | selenium.webdriver.common.options.ArgOptions\n",
+ " | selenium.webdriver.common.options.BaseOptions\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | enable_mobile(self, android_package: str = 'com.android.chrome', android_activity: Optional[str] = None, device_serial: Optional[str] = None) -> None\n",
+ " | Enables mobile browser use for browsers that support it.\n",
+ " | \n",
+ " | :Args:\n",
+ " | android_activity: The name of the android package to start\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties defined here:\n",
+ " | \n",
+ " | default_capabilities\n",
+ " | Return minimal capabilities necessary as a dictionary.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.chromium.options.ChromiumOptions:\n",
+ " | \n",
+ " | __init__(self) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | add_encoded_extension(self, extension: str) -> None\n",
+ " | Adds Base64 encoded string with extension data to a list that will\n",
+ " | be used to extract it to the ChromeDriver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - extension: Base64 encoded string with extension data\n",
+ " | \n",
+ " | add_experimental_option(self, name: str, value: Union[str, int, dict, List[str]]) -> None\n",
+ " | Adds an experimental option which is passed to chromium.\n",
+ " | \n",
+ " | :Args:\n",
+ " | name: The experimental option name.\n",
+ " | value: The option value.\n",
+ " | \n",
+ " | add_extension(self, extension: str) -> None\n",
+ " | Adds the path to the extension to a list that will be used to\n",
+ " | extract it to the ChromeDriver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - extension: path to the \\*.crx file\n",
+ " | \n",
+ " | to_capabilities(self) -> dict\n",
+ " | Creates a capabilities with all the options that have been set\n",
+ " | :Returns: A dictionary with everything.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.chromium.options.ChromiumOptions:\n",
+ " | \n",
+ " | experimental_options\n",
+ " | :Returns: A dictionary of experimental options for chromium.\n",
+ " | \n",
+ " | extensions\n",
+ " | :Returns: A list of encoded extensions that will be loaded.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.chromium.options.ChromiumOptions:\n",
+ " | \n",
+ " | binary_location\n",
+ " | :Returns: The location of the binary, otherwise an empty string.\n",
+ " | \n",
+ " | debugger_address\n",
+ " | :Returns: The address of the remote devtools instance.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes inherited from selenium.webdriver.chromium.options.ChromiumOptions:\n",
+ " | \n",
+ " | KEY = 'goog:chromeOptions'\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | add_argument(self, argument)\n",
+ " | Adds an argument to the list.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - Sets the arguments\n",
+ " | \n",
+ " | ignore_local_proxy_environment_variables(self) -> None\n",
+ " | By calling this you will ignore HTTP_PROXY and HTTPS_PROXY from\n",
+ " | being picked up and used.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | arguments\n",
+ " | :Returns: A list of arguments needed for the browser.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | BINARY_LOCATION_ERROR = 'Binary Location Must be a String'\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | set_capability(self, name, value) -> None\n",
+ " | Sets a capability.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | capabilities\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | accept_insecure_certs\n",
+ " | \n",
+ " | browser_version\n",
+ " | \n",
+ " | enable_downloads\n",
+ " | \n",
+ " | page_load_strategy\n",
+ " | \n",
+ " | platform_name\n",
+ " | \n",
+ " | proxy\n",
+ " | \n",
+ " | set_window_rect\n",
+ " | \n",
+ " | strict_file_interactability\n",
+ " | \n",
+ " | timeouts\n",
+ " | \n",
+ " | unhandled_prompt_behavior\n",
+ " \n",
+ " ChromeService = class Service(selenium.webdriver.chromium.service.ChromiumService)\n",
+ " | ChromeService(executable_path=None, port: int = 0, service_args: Optional[List[str]] = None, log_output: Union[int, str, IO[Any]] = None, env: Optional[Mapping[str, str]] = None, **kwargs) -> None\n",
+ " | \n",
+ " | A Service class that is responsible for the starting and stopping of\n",
+ " | `chromedriver`.\n",
+ " | \n",
+ " | :param executable_path: install path of the chromedriver executable, defaults to `chromedriver`.\n",
+ " | :param port: Port for the service to run on, defaults to 0 where the operating system will decide.\n",
+ " | :param service_args: (Optional) List of args to be passed to the subprocess when launching the executable.\n",
+ " | :param log_output: (Optional) int representation of STDOUT/DEVNULL, any IO instance or String path to file.\n",
+ " | :param env: (Optional) Mapping of environment variables for the new process, defaults to `os.environ`.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Service\n",
+ " | selenium.webdriver.chromium.service.ChromiumService\n",
+ " | selenium.webdriver.common.service.Service\n",
+ " | abc.ABC\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, executable_path=None, port: int = 0, service_args: Optional[List[str]] = None, log_output: Union[int, str, IO[Any]] = None, env: Optional[Mapping[str, str]] = None, **kwargs) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.chromium.service.ChromiumService:\n",
+ " | \n",
+ " | command_line_args(self) -> List[str]\n",
+ " | A List of program arguments (excluding the executable).\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __del__(self) -> None\n",
+ " | \n",
+ " | assert_process_still_running(self) -> None\n",
+ " | Check if the underlying process is still running.\n",
+ " | \n",
+ " | is_connectable(self) -> bool\n",
+ " | Establishes a socket connection to determine if the service running\n",
+ " | on the port is accessible.\n",
+ " | \n",
+ " | send_remote_shutdown_command(self) -> None\n",
+ " | Dispatch an HTTP request to the shutdown endpoint for the service in\n",
+ " | an attempt to stop it.\n",
+ " | \n",
+ " | start(self) -> None\n",
+ " | Starts the Service.\n",
+ " | \n",
+ " | :Exceptions:\n",
+ " | - WebDriverException : Raised either when it can't start the service\n",
+ " | or when it can't connect to the service\n",
+ " | \n",
+ " | stop(self) -> None\n",
+ " | Stops the service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | service_url\n",
+ " | Gets the url of the Service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | path\n",
+ " \n",
+ " ChromiumEdge = class WebDriver(selenium.webdriver.chromium.webdriver.ChromiumDriver)\n",
+ " | ChromiumEdge(options: selenium.webdriver.edge.options.Options = None, service: selenium.webdriver.edge.service.Service = None, keep_alive=True) -> None\n",
+ " | \n",
+ " | Controls the MSEdgeDriver and allows you to drive the browser.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | WebDriver\n",
+ " | selenium.webdriver.chromium.webdriver.ChromiumDriver\n",
+ " | selenium.webdriver.remote.webdriver.WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.BaseWebDriver\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, options: selenium.webdriver.edge.options.Options = None, service: selenium.webdriver.edge.service.Service = None, keep_alive=True) -> None\n",
+ " | Creates a new instance of the edge driver. Starts the service and\n",
+ " | then creates new instance of edge driver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - options - this takes an instance of EdgeOptions\n",
+ " | - service - Service object for handling the browser driver if you need to pass extra details\n",
+ " | - keep_alive - Whether to configure EdgeRemoteConnection to use HTTP keep-alive.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.chromium.webdriver.ChromiumDriver:\n",
+ " | \n",
+ " | delete_network_conditions(self) -> None\n",
+ " | Resets Chromium network emulation settings.\n",
+ " | \n",
+ " | execute_cdp_cmd(self, cmd: str, cmd_args: dict)\n",
+ " | Execute Chrome Devtools Protocol command and get returned result The\n",
+ " | command and command args should follow chrome devtools protocol\n",
+ " | domains/commands, refer to link\n",
+ " | https://chromedevtools.github.io/devtools-protocol/\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cmd: A str, command name\n",
+ " | - cmd_args: A dict, command args. empty dict {} if there is no command args\n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': requestId})\n",
+ " | :Returns:\n",
+ " | A dict, empty dict {} if there is no result to return.\n",
+ " | For example to getResponseBody:\n",
+ " | {'base64Encoded': False, 'body': 'response body string'}\n",
+ " | \n",
+ " | get_issue_message(self)\n",
+ " | :Returns: An error message when there is any issue in a Cast\n",
+ " | session.\n",
+ " | \n",
+ " | get_network_conditions(self)\n",
+ " | Gets Chromium network emulation settings.\n",
+ " | \n",
+ " | :Returns: A dict. For example: {'latency': 4,\n",
+ " | 'download_throughput': 2, 'upload_throughput': 2, 'offline':\n",
+ " | False}\n",
+ " | \n",
+ " | get_sinks(self) -> list\n",
+ " | :Returns: A list of sinks available for Cast.\n",
+ " | \n",
+ " | launch_app(self, id)\n",
+ " | Launches Chromium app specified by id.\n",
+ " | \n",
+ " | quit(self) -> None\n",
+ " | Closes the browser and shuts down the ChromiumDriver executable that\n",
+ " | is started when starting the ChromiumDriver.\n",
+ " | \n",
+ " | set_network_conditions(self, **network_conditions) -> None\n",
+ " | Sets Chromium network emulation settings.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - network_conditions: A dict with conditions specification.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_network_conditions(\n",
+ " | offline=False,\n",
+ " | latency=5, # additional latency (ms)\n",
+ " | download_throughput=500 * 1024, # maximal throughput\n",
+ " | upload_throughput=500 * 1024) # maximal throughput\n",
+ " | \n",
+ " | Note: 'throughput' can be used to set both (for download and upload).\n",
+ " | \n",
+ " | set_permissions(self, name: str, value: str) -> None\n",
+ " | Sets Applicable Permission.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - name: The item to set the permission on.\n",
+ " | - value: The value to set on the item\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_permissions('clipboard-read', 'denied')\n",
+ " | \n",
+ " | set_sink_to_use(self, sink_name: str) -> dict\n",
+ " | Sets a specific sink, using its name, as a Cast session receiver\n",
+ " | target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to use as the target.\n",
+ " | \n",
+ " | start_desktop_mirroring(self, sink_name: str) -> dict\n",
+ " | Starts a desktop mirroring session on a specific receiver target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to use as the target.\n",
+ " | \n",
+ " | start_tab_mirroring(self, sink_name: str) -> dict\n",
+ " | Starts a tab mirroring session on a specific receiver target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to use as the target.\n",
+ " | \n",
+ " | stop_casting(self, sink_name: str) -> dict\n",
+ " | Stops the existing Cast session on a specific receiver target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to stop the Cast session.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | __enter__(self)\n",
+ " | \n",
+ " | __exit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], traceback: Optional[traceback])\n",
+ " | \n",
+ " | __repr__(self)\n",
+ " | Return repr(self).\n",
+ " | \n",
+ " | add_cookie(self, cookie_dict) -> None\n",
+ " | Adds a cookie to your current session.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cookie_dict: A dictionary object, with required keys - \"name\" and \"value\";\n",
+ " | optional keys - \"path\", \"domain\", \"secure\", \"httpOnly\", \"expiry\", \"sameSite\"\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure' : True})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'sameSite' : 'Strict'})\n",
+ " | \n",
+ " | add_credential(self, credential: selenium.webdriver.common.virtual_authenticator.Credential) -> None\n",
+ " | Injects a credential into the authenticator.\n",
+ " | \n",
+ " | add_virtual_authenticator(self, options: selenium.webdriver.common.virtual_authenticator.VirtualAuthenticatorOptions) -> None\n",
+ " | Adds a virtual authenticator with the given options.\n",
+ " | \n",
+ " | back(self) -> None\n",
+ " | Goes one step backward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.back()\n",
+ " | \n",
+ " | bidi_connection(self)\n",
+ " | \n",
+ " | close(self) -> None\n",
+ " | Closes the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.close()\n",
+ " | \n",
+ " | create_web_element(self, element_id: str) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Creates a web element with the specified `element_id`.\n",
+ " | \n",
+ " | delete_all_cookies(self) -> None\n",
+ " | Delete all cookies in the scope of the session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_all_cookies()\n",
+ " | \n",
+ " | delete_cookie(self, name) -> None\n",
+ " | Deletes a single cookie with the given name.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_cookie('my_cookie')\n",
+ " | \n",
+ " | delete_downloadable_files(self) -> None\n",
+ " | Deletes all downloadable files.\n",
+ " | \n",
+ " | download_file(self, file_name: str, target_directory: str) -> None\n",
+ " | Downloads a file with the specified file name to the target\n",
+ " | directory.\n",
+ " | \n",
+ " | file_name: The name of the file to download.\n",
+ " | target_directory: The path to the directory to save the downloaded file.\n",
+ " | \n",
+ " | execute(self, driver_command: str, params: dict = None) -> dict\n",
+ " | Sends a command to be executed by a command.CommandExecutor.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver_command: The name of the command to execute as a string.\n",
+ " | - params: A dictionary of named parameters to send with the command.\n",
+ " | \n",
+ " | :Returns:\n",
+ " | The command's JSON response loaded into a dictionary object.\n",
+ " | \n",
+ " | execute_async_script(self, script: str, *args)\n",
+ " | Asynchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | script = \"var callback = arguments[arguments.length - 1]; \" \\\n",
+ " | \"window.setTimeout(function(){ callback('timeout') }, 3000);\"\n",
+ " | driver.execute_async_script(script)\n",
+ " | \n",
+ " | execute_script(self, script, *args)\n",
+ " | Synchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_script('return document.title;')\n",
+ " | \n",
+ " | file_detector_context(self, file_detector_class, *args, **kwargs)\n",
+ " | Overrides the current file detector (if necessary) in limited\n",
+ " | context. Ensures the original file detector is set afterwards.\n",
+ " | \n",
+ " | Example::\n",
+ " | \n",
+ " | with webdriver.file_detector_context(UselessFileDetector):\n",
+ " | someinput.send_keys('/etc/hosts')\n",
+ " | \n",
+ " | :Args:\n",
+ " | - file_detector_class - Class of the desired file detector. If the class is different\n",
+ " | from the current file_detector, then the class is instantiated with args and kwargs\n",
+ " | and used as a file detector during the duration of the context manager.\n",
+ " | - args - Optional arguments that get passed to the file detector class during\n",
+ " | instantiation.\n",
+ " | - kwargs - Keyword arguments, passed the same way as args.\n",
+ " | \n",
+ " | find_element(self, by='id', value: Optional[str] = None) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Find an element given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.find_element(By.ID, 'foo')\n",
+ " | \n",
+ " | :rtype: WebElement\n",
+ " | \n",
+ " | find_elements(self, by='id', value: Optional[str] = None) -> List[selenium.webdriver.remote.webelement.WebElement]\n",
+ " | Find elements given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | elements = driver.find_elements(By.CLASS_NAME, 'foo')\n",
+ " | \n",
+ " | :rtype: list of WebElement\n",
+ " | \n",
+ " | forward(self) -> None\n",
+ " | Goes one step forward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.forward()\n",
+ " | \n",
+ " | fullscreen_window(self) -> None\n",
+ " | Invokes the window manager-specific 'full screen' operation.\n",
+ " | \n",
+ " | get(self, url: str) -> None\n",
+ " | Loads a web page in the current browser session.\n",
+ " | \n",
+ " | get_cookie(self, name) -> Optional[Dict]\n",
+ " | Get a single cookie by name. Returns the cookie if found, None if\n",
+ " | not.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookie('my_cookie')\n",
+ " | \n",
+ " | get_cookies(self) -> List[dict]\n",
+ " | Returns a set of dictionaries, corresponding to cookies visible in\n",
+ " | the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookies()\n",
+ " | \n",
+ " | get_credentials(self) -> List[selenium.webdriver.common.virtual_authenticator.Credential]\n",
+ " | Returns the list of credentials owned by the authenticator.\n",
+ " | \n",
+ " | get_downloadable_files(self) -> dict\n",
+ " | Retrieves the downloadable files as a map of file names and their\n",
+ " | corresponding URLs.\n",
+ " | \n",
+ " | get_log(self, log_type)\n",
+ " | Gets the log for a given log type.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - log_type: type of log that which will be returned\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_log('browser')\n",
+ " | driver.get_log('driver')\n",
+ " | driver.get_log('client')\n",
+ " | driver.get_log('server')\n",
+ " | \n",
+ " | get_pinned_scripts(self) -> List[str]\n",
+ " | \n",
+ " | get_screenshot_as_base64(self) -> str\n",
+ " | Gets the screenshot of the current window as a base64 encoded string\n",
+ " | which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_base64()\n",
+ " | \n",
+ " | get_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_screenshot_as_png(self) -> bytes\n",
+ " | Gets the screenshot of the current window as a binary data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_png()\n",
+ " | \n",
+ " | get_window_position(self, windowHandle='current') -> dict\n",
+ " | Gets the x,y position of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_position()\n",
+ " | \n",
+ " | get_window_rect(self) -> dict\n",
+ " | Gets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_rect()\n",
+ " | \n",
+ " | get_window_size(self, windowHandle: str = 'current') -> dict\n",
+ " | Gets the width and height of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_size()\n",
+ " | \n",
+ " | implicitly_wait(self, time_to_wait: float) -> None\n",
+ " | Sets a sticky timeout to implicitly wait for an element to be found,\n",
+ " | or a command to complete. This method only needs to be called one time\n",
+ " | per session. To set the timeout for calls to execute_async_script, see\n",
+ " | set_script_timeout.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: Amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.implicitly_wait(30)\n",
+ " | \n",
+ " | maximize_window(self) -> None\n",
+ " | Maximizes the current window that webdriver is using.\n",
+ " | \n",
+ " | minimize_window(self) -> None\n",
+ " | Invokes the window manager-specific 'minimize' operation.\n",
+ " | \n",
+ " | pin_script(self, script: str, script_key=None) -> selenium.webdriver.remote.script_key.ScriptKey\n",
+ " | Store common javascript scripts to be executed later by a unique\n",
+ " | hashable ID.\n",
+ " | \n",
+ " | print_page(self, print_options: Optional[selenium.webdriver.common.print_page_options.PrintOptions] = None) -> str\n",
+ " | Takes PDF of the current page.\n",
+ " | \n",
+ " | The driver makes a best effort to return a PDF based on the\n",
+ " | provided parameters.\n",
+ " | \n",
+ " | refresh(self) -> None\n",
+ " | Refreshes the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.refresh()\n",
+ " | \n",
+ " | remove_all_credentials(self) -> None\n",
+ " | Removes all credentials from the authenticator.\n",
+ " | \n",
+ " | remove_credential(self, credential_id: Union[str, bytearray]) -> None\n",
+ " | Removes a credential from the authenticator.\n",
+ " | \n",
+ " | remove_virtual_authenticator(self) -> None\n",
+ " | Removes a previously added virtual authenticator.\n",
+ " | \n",
+ " | The authenticator is no longer valid after removal, so no\n",
+ " | methods may be called.\n",
+ " | \n",
+ " | save_screenshot(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_page_load_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time to wait for a page load to complete before\n",
+ " | throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_page_load_timeout(30)\n",
+ " | \n",
+ " | set_script_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time that the script should wait during an\n",
+ " | execute_async_script call before throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_script_timeout(30)\n",
+ " | \n",
+ " | set_user_verified(self, verified: bool) -> None\n",
+ " | Sets whether the authenticator will simulate success or fail on user\n",
+ " | verification.\n",
+ " | \n",
+ " | verified: True if the authenticator will pass user verification, False otherwise.\n",
+ " | \n",
+ " | set_window_position(self, x, y, windowHandle: str = 'current') -> dict\n",
+ " | Sets the x,y position of the current window. (window.moveTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - x: the x-coordinate in pixels to set the window position\n",
+ " | - y: the y-coordinate in pixels to set the window position\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_position(0,0)\n",
+ " | \n",
+ " | set_window_rect(self, x=None, y=None, width=None, height=None) -> dict\n",
+ " | Sets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window. This method is only supported for W3C compatible\n",
+ " | browsers; other browsers should use `set_window_position` and\n",
+ " | `set_window_size`.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_rect(x=10, y=10)\n",
+ " | driver.set_window_rect(width=100, height=200)\n",
+ " | driver.set_window_rect(x=10, y=10, width=100, height=200)\n",
+ " | \n",
+ " | set_window_size(self, width, height, windowHandle: str = 'current') -> None\n",
+ " | Sets the width and height of the current window. (window.resizeTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - width: the width in pixels to set the window to\n",
+ " | - height: the height in pixels to set the window to\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_size(800,600)\n",
+ " | \n",
+ " | start_client(self)\n",
+ " | Called before starting a new session.\n",
+ " | \n",
+ " | This method may be overridden to define custom startup behavior.\n",
+ " | \n",
+ " | start_session(self, capabilities: dict) -> None\n",
+ " | Creates a new session with the desired capabilities.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - capabilities - a capabilities dict to start the session with.\n",
+ " | \n",
+ " | stop_client(self)\n",
+ " | Called after executing a quit command.\n",
+ " | \n",
+ " | This method may be overridden to define custom shutdown\n",
+ " | behavior.\n",
+ " | \n",
+ " | unpin(self, script_key: selenium.webdriver.remote.script_key.ScriptKey) -> None\n",
+ " | Remove a pinned script from storage.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | application_cache\n",
+ " | Returns a ApplicationCache Object to interact with the browser app\n",
+ " | cache.\n",
+ " | \n",
+ " | capabilities\n",
+ " | Returns the drivers current capabilities being used.\n",
+ " | \n",
+ " | current_url\n",
+ " | Gets the URL of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_url\n",
+ " | \n",
+ " | current_window_handle\n",
+ " | Returns the handle of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_window_handle\n",
+ " | \n",
+ " | desired_capabilities\n",
+ " | Returns the drivers current desired capabilities being used.\n",
+ " | \n",
+ " | log_types\n",
+ " | Gets a list of the available log types. This only works with w3c\n",
+ " | compliant browsers.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.log_types\n",
+ " | \n",
+ " | mobile\n",
+ " | \n",
+ " | name\n",
+ " | Returns the name of the underlying browser for this instance.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | name = driver.name\n",
+ " | \n",
+ " | page_source\n",
+ " | Gets the source of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.page_source\n",
+ " | \n",
+ " | switch_to\n",
+ " | :Returns:\n",
+ " | - SwitchTo: an object containing all options to switch focus into\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.switch_to.active_element\n",
+ " | alert = driver.switch_to.alert\n",
+ " | driver.switch_to.default_content()\n",
+ " | driver.switch_to.frame('frame_name')\n",
+ " | driver.switch_to.frame(1)\n",
+ " | driver.switch_to.frame(driver.find_elements(By.TAG_NAME, \"iframe\")[0])\n",
+ " | driver.switch_to.parent_frame()\n",
+ " | driver.switch_to.window('main')\n",
+ " | \n",
+ " | title\n",
+ " | Returns the title of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | title = driver.title\n",
+ " | \n",
+ " | virtual_authenticator_id\n",
+ " | Returns the id of the virtual authenticator.\n",
+ " | \n",
+ " | window_handles\n",
+ " | Returns the handles of all windows within the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.window_handles\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | file_detector\n",
+ " | \n",
+ " | orientation\n",
+ " | Gets the current orientation of the device.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | orientation = driver.orientation\n",
+ " | \n",
+ " | timeouts\n",
+ " | Get all the timeouts that have been set on the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.timeouts\n",
+ " | :rtype: Timeout\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.BaseWebDriver:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " class DesiredCapabilities(builtins.object)\n",
+ " | Set of default supported desired capabilities.\n",
+ " | \n",
+ " | Use this as a starting point for creating a desired capabilities object for\n",
+ " | requesting remote webdrivers for connecting to selenium server or selenium grid.\n",
+ " | \n",
+ " | Usage Example::\n",
+ " | \n",
+ " | from selenium import webdriver\n",
+ " | \n",
+ " | selenium_grid_url = \"http://198.0.0.1:4444/wd/hub\"\n",
+ " | \n",
+ " | # Create a desired capabilities object as a starting point.\n",
+ " | capabilities = DesiredCapabilities.FIREFOX.copy()\n",
+ " | capabilities['platform'] = \"WINDOWS\"\n",
+ " | capabilities['version'] = \"10\"\n",
+ " | \n",
+ " | # Instantiate an instance of Remote WebDriver with the desired capabilities.\n",
+ " | driver = webdriver.Remote(desired_capabilities=capabilities,\n",
+ " | command_executor=selenium_grid_url)\n",
+ " | \n",
+ " | Note: Always use '.copy()' on the DesiredCapabilities object to avoid the side\n",
+ " | effects of altering the Global class instance.\n",
+ " | \n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | CHROME = {'browserName': 'chrome'}\n",
+ " | \n",
+ " | EDGE = {'browserName': 'MicrosoftEdge'}\n",
+ " | \n",
+ " | FIREFOX = {'acceptInsecureCerts': True, 'browserName': 'firefox', 'moz...\n",
+ " | \n",
+ " | HTMLUNIT = {'browserName': 'htmlunit', 'platform': 'ANY', 'version': '...\n",
+ " | \n",
+ " | HTMLUNITWITHJS = {'browserName': 'htmlunit', 'javascriptEnabled': True...\n",
+ " | \n",
+ " | INTERNETEXPLORER = {'browserName': 'internet explorer', 'platformName'...\n",
+ " | \n",
+ " | IPAD = {'browserName': 'iPad', 'platform': 'mac', 'version': ''}\n",
+ " | \n",
+ " | IPHONE = {'browserName': 'iPhone', 'platform': 'mac', 'version': ''}\n",
+ " | \n",
+ " | SAFARI = {'browserName': 'safari', 'platformName': 'mac'}\n",
+ " | \n",
+ " | WEBKITGTK = {'browserName': 'MiniBrowser', 'platform': 'ANY', 'version...\n",
+ " | \n",
+ " | WPEWEBKIT = {'browserName': 'MiniBrowser', 'platform': 'ANY', 'version...\n",
+ " \n",
+ " Edge = class WebDriver(selenium.webdriver.chromium.webdriver.ChromiumDriver)\n",
+ " | Edge(options: selenium.webdriver.edge.options.Options = None, service: selenium.webdriver.edge.service.Service = None, keep_alive=True) -> None\n",
+ " | \n",
+ " | Controls the MSEdgeDriver and allows you to drive the browser.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | WebDriver\n",
+ " | selenium.webdriver.chromium.webdriver.ChromiumDriver\n",
+ " | selenium.webdriver.remote.webdriver.WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.BaseWebDriver\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, options: selenium.webdriver.edge.options.Options = None, service: selenium.webdriver.edge.service.Service = None, keep_alive=True) -> None\n",
+ " | Creates a new instance of the edge driver. Starts the service and\n",
+ " | then creates new instance of edge driver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - options - this takes an instance of EdgeOptions\n",
+ " | - service - Service object for handling the browser driver if you need to pass extra details\n",
+ " | - keep_alive - Whether to configure EdgeRemoteConnection to use HTTP keep-alive.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.chromium.webdriver.ChromiumDriver:\n",
+ " | \n",
+ " | delete_network_conditions(self) -> None\n",
+ " | Resets Chromium network emulation settings.\n",
+ " | \n",
+ " | execute_cdp_cmd(self, cmd: str, cmd_args: dict)\n",
+ " | Execute Chrome Devtools Protocol command and get returned result The\n",
+ " | command and command args should follow chrome devtools protocol\n",
+ " | domains/commands, refer to link\n",
+ " | https://chromedevtools.github.io/devtools-protocol/\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cmd: A str, command name\n",
+ " | - cmd_args: A dict, command args. empty dict {} if there is no command args\n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': requestId})\n",
+ " | :Returns:\n",
+ " | A dict, empty dict {} if there is no result to return.\n",
+ " | For example to getResponseBody:\n",
+ " | {'base64Encoded': False, 'body': 'response body string'}\n",
+ " | \n",
+ " | get_issue_message(self)\n",
+ " | :Returns: An error message when there is any issue in a Cast\n",
+ " | session.\n",
+ " | \n",
+ " | get_network_conditions(self)\n",
+ " | Gets Chromium network emulation settings.\n",
+ " | \n",
+ " | :Returns: A dict. For example: {'latency': 4,\n",
+ " | 'download_throughput': 2, 'upload_throughput': 2, 'offline':\n",
+ " | False}\n",
+ " | \n",
+ " | get_sinks(self) -> list\n",
+ " | :Returns: A list of sinks available for Cast.\n",
+ " | \n",
+ " | launch_app(self, id)\n",
+ " | Launches Chromium app specified by id.\n",
+ " | \n",
+ " | quit(self) -> None\n",
+ " | Closes the browser and shuts down the ChromiumDriver executable that\n",
+ " | is started when starting the ChromiumDriver.\n",
+ " | \n",
+ " | set_network_conditions(self, **network_conditions) -> None\n",
+ " | Sets Chromium network emulation settings.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - network_conditions: A dict with conditions specification.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_network_conditions(\n",
+ " | offline=False,\n",
+ " | latency=5, # additional latency (ms)\n",
+ " | download_throughput=500 * 1024, # maximal throughput\n",
+ " | upload_throughput=500 * 1024) # maximal throughput\n",
+ " | \n",
+ " | Note: 'throughput' can be used to set both (for download and upload).\n",
+ " | \n",
+ " | set_permissions(self, name: str, value: str) -> None\n",
+ " | Sets Applicable Permission.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - name: The item to set the permission on.\n",
+ " | - value: The value to set on the item\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_permissions('clipboard-read', 'denied')\n",
+ " | \n",
+ " | set_sink_to_use(self, sink_name: str) -> dict\n",
+ " | Sets a specific sink, using its name, as a Cast session receiver\n",
+ " | target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to use as the target.\n",
+ " | \n",
+ " | start_desktop_mirroring(self, sink_name: str) -> dict\n",
+ " | Starts a desktop mirroring session on a specific receiver target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to use as the target.\n",
+ " | \n",
+ " | start_tab_mirroring(self, sink_name: str) -> dict\n",
+ " | Starts a tab mirroring session on a specific receiver target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to use as the target.\n",
+ " | \n",
+ " | stop_casting(self, sink_name: str) -> dict\n",
+ " | Stops the existing Cast session on a specific receiver target.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - sink_name: Name of the sink to stop the Cast session.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | __enter__(self)\n",
+ " | \n",
+ " | __exit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], traceback: Optional[traceback])\n",
+ " | \n",
+ " | __repr__(self)\n",
+ " | Return repr(self).\n",
+ " | \n",
+ " | add_cookie(self, cookie_dict) -> None\n",
+ " | Adds a cookie to your current session.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cookie_dict: A dictionary object, with required keys - \"name\" and \"value\";\n",
+ " | optional keys - \"path\", \"domain\", \"secure\", \"httpOnly\", \"expiry\", \"sameSite\"\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure' : True})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'sameSite' : 'Strict'})\n",
+ " | \n",
+ " | add_credential(self, credential: selenium.webdriver.common.virtual_authenticator.Credential) -> None\n",
+ " | Injects a credential into the authenticator.\n",
+ " | \n",
+ " | add_virtual_authenticator(self, options: selenium.webdriver.common.virtual_authenticator.VirtualAuthenticatorOptions) -> None\n",
+ " | Adds a virtual authenticator with the given options.\n",
+ " | \n",
+ " | back(self) -> None\n",
+ " | Goes one step backward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.back()\n",
+ " | \n",
+ " | bidi_connection(self)\n",
+ " | \n",
+ " | close(self) -> None\n",
+ " | Closes the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.close()\n",
+ " | \n",
+ " | create_web_element(self, element_id: str) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Creates a web element with the specified `element_id`.\n",
+ " | \n",
+ " | delete_all_cookies(self) -> None\n",
+ " | Delete all cookies in the scope of the session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_all_cookies()\n",
+ " | \n",
+ " | delete_cookie(self, name) -> None\n",
+ " | Deletes a single cookie with the given name.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_cookie('my_cookie')\n",
+ " | \n",
+ " | delete_downloadable_files(self) -> None\n",
+ " | Deletes all downloadable files.\n",
+ " | \n",
+ " | download_file(self, file_name: str, target_directory: str) -> None\n",
+ " | Downloads a file with the specified file name to the target\n",
+ " | directory.\n",
+ " | \n",
+ " | file_name: The name of the file to download.\n",
+ " | target_directory: The path to the directory to save the downloaded file.\n",
+ " | \n",
+ " | execute(self, driver_command: str, params: dict = None) -> dict\n",
+ " | Sends a command to be executed by a command.CommandExecutor.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver_command: The name of the command to execute as a string.\n",
+ " | - params: A dictionary of named parameters to send with the command.\n",
+ " | \n",
+ " | :Returns:\n",
+ " | The command's JSON response loaded into a dictionary object.\n",
+ " | \n",
+ " | execute_async_script(self, script: str, *args)\n",
+ " | Asynchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | script = \"var callback = arguments[arguments.length - 1]; \" \\\n",
+ " | \"window.setTimeout(function(){ callback('timeout') }, 3000);\"\n",
+ " | driver.execute_async_script(script)\n",
+ " | \n",
+ " | execute_script(self, script, *args)\n",
+ " | Synchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_script('return document.title;')\n",
+ " | \n",
+ " | file_detector_context(self, file_detector_class, *args, **kwargs)\n",
+ " | Overrides the current file detector (if necessary) in limited\n",
+ " | context. Ensures the original file detector is set afterwards.\n",
+ " | \n",
+ " | Example::\n",
+ " | \n",
+ " | with webdriver.file_detector_context(UselessFileDetector):\n",
+ " | someinput.send_keys('/etc/hosts')\n",
+ " | \n",
+ " | :Args:\n",
+ " | - file_detector_class - Class of the desired file detector. If the class is different\n",
+ " | from the current file_detector, then the class is instantiated with args and kwargs\n",
+ " | and used as a file detector during the duration of the context manager.\n",
+ " | - args - Optional arguments that get passed to the file detector class during\n",
+ " | instantiation.\n",
+ " | - kwargs - Keyword arguments, passed the same way as args.\n",
+ " | \n",
+ " | find_element(self, by='id', value: Optional[str] = None) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Find an element given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.find_element(By.ID, 'foo')\n",
+ " | \n",
+ " | :rtype: WebElement\n",
+ " | \n",
+ " | find_elements(self, by='id', value: Optional[str] = None) -> List[selenium.webdriver.remote.webelement.WebElement]\n",
+ " | Find elements given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | elements = driver.find_elements(By.CLASS_NAME, 'foo')\n",
+ " | \n",
+ " | :rtype: list of WebElement\n",
+ " | \n",
+ " | forward(self) -> None\n",
+ " | Goes one step forward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.forward()\n",
+ " | \n",
+ " | fullscreen_window(self) -> None\n",
+ " | Invokes the window manager-specific 'full screen' operation.\n",
+ " | \n",
+ " | get(self, url: str) -> None\n",
+ " | Loads a web page in the current browser session.\n",
+ " | \n",
+ " | get_cookie(self, name) -> Optional[Dict]\n",
+ " | Get a single cookie by name. Returns the cookie if found, None if\n",
+ " | not.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookie('my_cookie')\n",
+ " | \n",
+ " | get_cookies(self) -> List[dict]\n",
+ " | Returns a set of dictionaries, corresponding to cookies visible in\n",
+ " | the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookies()\n",
+ " | \n",
+ " | get_credentials(self) -> List[selenium.webdriver.common.virtual_authenticator.Credential]\n",
+ " | Returns the list of credentials owned by the authenticator.\n",
+ " | \n",
+ " | get_downloadable_files(self) -> dict\n",
+ " | Retrieves the downloadable files as a map of file names and their\n",
+ " | corresponding URLs.\n",
+ " | \n",
+ " | get_log(self, log_type)\n",
+ " | Gets the log for a given log type.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - log_type: type of log that which will be returned\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_log('browser')\n",
+ " | driver.get_log('driver')\n",
+ " | driver.get_log('client')\n",
+ " | driver.get_log('server')\n",
+ " | \n",
+ " | get_pinned_scripts(self) -> List[str]\n",
+ " | \n",
+ " | get_screenshot_as_base64(self) -> str\n",
+ " | Gets the screenshot of the current window as a base64 encoded string\n",
+ " | which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_base64()\n",
+ " | \n",
+ " | get_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_screenshot_as_png(self) -> bytes\n",
+ " | Gets the screenshot of the current window as a binary data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_png()\n",
+ " | \n",
+ " | get_window_position(self, windowHandle='current') -> dict\n",
+ " | Gets the x,y position of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_position()\n",
+ " | \n",
+ " | get_window_rect(self) -> dict\n",
+ " | Gets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_rect()\n",
+ " | \n",
+ " | get_window_size(self, windowHandle: str = 'current') -> dict\n",
+ " | Gets the width and height of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_size()\n",
+ " | \n",
+ " | implicitly_wait(self, time_to_wait: float) -> None\n",
+ " | Sets a sticky timeout to implicitly wait for an element to be found,\n",
+ " | or a command to complete. This method only needs to be called one time\n",
+ " | per session. To set the timeout for calls to execute_async_script, see\n",
+ " | set_script_timeout.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: Amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.implicitly_wait(30)\n",
+ " | \n",
+ " | maximize_window(self) -> None\n",
+ " | Maximizes the current window that webdriver is using.\n",
+ " | \n",
+ " | minimize_window(self) -> None\n",
+ " | Invokes the window manager-specific 'minimize' operation.\n",
+ " | \n",
+ " | pin_script(self, script: str, script_key=None) -> selenium.webdriver.remote.script_key.ScriptKey\n",
+ " | Store common javascript scripts to be executed later by a unique\n",
+ " | hashable ID.\n",
+ " | \n",
+ " | print_page(self, print_options: Optional[selenium.webdriver.common.print_page_options.PrintOptions] = None) -> str\n",
+ " | Takes PDF of the current page.\n",
+ " | \n",
+ " | The driver makes a best effort to return a PDF based on the\n",
+ " | provided parameters.\n",
+ " | \n",
+ " | refresh(self) -> None\n",
+ " | Refreshes the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.refresh()\n",
+ " | \n",
+ " | remove_all_credentials(self) -> None\n",
+ " | Removes all credentials from the authenticator.\n",
+ " | \n",
+ " | remove_credential(self, credential_id: Union[str, bytearray]) -> None\n",
+ " | Removes a credential from the authenticator.\n",
+ " | \n",
+ " | remove_virtual_authenticator(self) -> None\n",
+ " | Removes a previously added virtual authenticator.\n",
+ " | \n",
+ " | The authenticator is no longer valid after removal, so no\n",
+ " | methods may be called.\n",
+ " | \n",
+ " | save_screenshot(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_page_load_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time to wait for a page load to complete before\n",
+ " | throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_page_load_timeout(30)\n",
+ " | \n",
+ " | set_script_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time that the script should wait during an\n",
+ " | execute_async_script call before throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_script_timeout(30)\n",
+ " | \n",
+ " | set_user_verified(self, verified: bool) -> None\n",
+ " | Sets whether the authenticator will simulate success or fail on user\n",
+ " | verification.\n",
+ " | \n",
+ " | verified: True if the authenticator will pass user verification, False otherwise.\n",
+ " | \n",
+ " | set_window_position(self, x, y, windowHandle: str = 'current') -> dict\n",
+ " | Sets the x,y position of the current window. (window.moveTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - x: the x-coordinate in pixels to set the window position\n",
+ " | - y: the y-coordinate in pixels to set the window position\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_position(0,0)\n",
+ " | \n",
+ " | set_window_rect(self, x=None, y=None, width=None, height=None) -> dict\n",
+ " | Sets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window. This method is only supported for W3C compatible\n",
+ " | browsers; other browsers should use `set_window_position` and\n",
+ " | `set_window_size`.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_rect(x=10, y=10)\n",
+ " | driver.set_window_rect(width=100, height=200)\n",
+ " | driver.set_window_rect(x=10, y=10, width=100, height=200)\n",
+ " | \n",
+ " | set_window_size(self, width, height, windowHandle: str = 'current') -> None\n",
+ " | Sets the width and height of the current window. (window.resizeTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - width: the width in pixels to set the window to\n",
+ " | - height: the height in pixels to set the window to\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_size(800,600)\n",
+ " | \n",
+ " | start_client(self)\n",
+ " | Called before starting a new session.\n",
+ " | \n",
+ " | This method may be overridden to define custom startup behavior.\n",
+ " | \n",
+ " | start_session(self, capabilities: dict) -> None\n",
+ " | Creates a new session with the desired capabilities.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - capabilities - a capabilities dict to start the session with.\n",
+ " | \n",
+ " | stop_client(self)\n",
+ " | Called after executing a quit command.\n",
+ " | \n",
+ " | This method may be overridden to define custom shutdown\n",
+ " | behavior.\n",
+ " | \n",
+ " | unpin(self, script_key: selenium.webdriver.remote.script_key.ScriptKey) -> None\n",
+ " | Remove a pinned script from storage.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | application_cache\n",
+ " | Returns a ApplicationCache Object to interact with the browser app\n",
+ " | cache.\n",
+ " | \n",
+ " | capabilities\n",
+ " | Returns the drivers current capabilities being used.\n",
+ " | \n",
+ " | current_url\n",
+ " | Gets the URL of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_url\n",
+ " | \n",
+ " | current_window_handle\n",
+ " | Returns the handle of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_window_handle\n",
+ " | \n",
+ " | desired_capabilities\n",
+ " | Returns the drivers current desired capabilities being used.\n",
+ " | \n",
+ " | log_types\n",
+ " | Gets a list of the available log types. This only works with w3c\n",
+ " | compliant browsers.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.log_types\n",
+ " | \n",
+ " | mobile\n",
+ " | \n",
+ " | name\n",
+ " | Returns the name of the underlying browser for this instance.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | name = driver.name\n",
+ " | \n",
+ " | page_source\n",
+ " | Gets the source of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.page_source\n",
+ " | \n",
+ " | switch_to\n",
+ " | :Returns:\n",
+ " | - SwitchTo: an object containing all options to switch focus into\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.switch_to.active_element\n",
+ " | alert = driver.switch_to.alert\n",
+ " | driver.switch_to.default_content()\n",
+ " | driver.switch_to.frame('frame_name')\n",
+ " | driver.switch_to.frame(1)\n",
+ " | driver.switch_to.frame(driver.find_elements(By.TAG_NAME, \"iframe\")[0])\n",
+ " | driver.switch_to.parent_frame()\n",
+ " | driver.switch_to.window('main')\n",
+ " | \n",
+ " | title\n",
+ " | Returns the title of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | title = driver.title\n",
+ " | \n",
+ " | virtual_authenticator_id\n",
+ " | Returns the id of the virtual authenticator.\n",
+ " | \n",
+ " | window_handles\n",
+ " | Returns the handles of all windows within the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.window_handles\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | file_detector\n",
+ " | \n",
+ " | orientation\n",
+ " | Gets the current orientation of the device.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | orientation = driver.orientation\n",
+ " | \n",
+ " | timeouts\n",
+ " | Get all the timeouts that have been set on the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.timeouts\n",
+ " | :rtype: Timeout\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.BaseWebDriver:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " EdgeOptions = class Options(selenium.webdriver.chromium.options.ChromiumOptions)\n",
+ " | EdgeOptions() -> None\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Options\n",
+ " | selenium.webdriver.chromium.options.ChromiumOptions\n",
+ " | selenium.webdriver.common.options.ArgOptions\n",
+ " | selenium.webdriver.common.options.BaseOptions\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | to_capabilities(self) -> dict\n",
+ " | Creates a capabilities with all the options that have been set and\n",
+ " | :Returns: A dictionary with everything.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties defined here:\n",
+ " | \n",
+ " | default_capabilities\n",
+ " | Return minimal capabilities necessary as a dictionary.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | use_webview\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | KEY = 'ms:edgeOptions'\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.chromium.options.ChromiumOptions:\n",
+ " | \n",
+ " | add_encoded_extension(self, extension: str) -> None\n",
+ " | Adds Base64 encoded string with extension data to a list that will\n",
+ " | be used to extract it to the ChromeDriver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - extension: Base64 encoded string with extension data\n",
+ " | \n",
+ " | add_experimental_option(self, name: str, value: Union[str, int, dict, List[str]]) -> None\n",
+ " | Adds an experimental option which is passed to chromium.\n",
+ " | \n",
+ " | :Args:\n",
+ " | name: The experimental option name.\n",
+ " | value: The option value.\n",
+ " | \n",
+ " | add_extension(self, extension: str) -> None\n",
+ " | Adds the path to the extension to a list that will be used to\n",
+ " | extract it to the ChromeDriver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - extension: path to the \\*.crx file\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.chromium.options.ChromiumOptions:\n",
+ " | \n",
+ " | experimental_options\n",
+ " | :Returns: A dictionary of experimental options for chromium.\n",
+ " | \n",
+ " | extensions\n",
+ " | :Returns: A list of encoded extensions that will be loaded.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.chromium.options.ChromiumOptions:\n",
+ " | \n",
+ " | binary_location\n",
+ " | :Returns: The location of the binary, otherwise an empty string.\n",
+ " | \n",
+ " | debugger_address\n",
+ " | :Returns: The address of the remote devtools instance.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | add_argument(self, argument)\n",
+ " | Adds an argument to the list.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - Sets the arguments\n",
+ " | \n",
+ " | ignore_local_proxy_environment_variables(self) -> None\n",
+ " | By calling this you will ignore HTTP_PROXY and HTTPS_PROXY from\n",
+ " | being picked up and used.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | arguments\n",
+ " | :Returns: A list of arguments needed for the browser.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | BINARY_LOCATION_ERROR = 'Binary Location Must be a String'\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | enable_mobile(self, android_package: Optional[str] = None, android_activity: Optional[str] = None, device_serial: Optional[str] = None) -> None\n",
+ " | Enables mobile browser use for browsers that support it.\n",
+ " | \n",
+ " | :Args:\n",
+ " | android_activity: The name of the android package to start\n",
+ " | \n",
+ " | set_capability(self, name, value) -> None\n",
+ " | Sets a capability.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | capabilities\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | accept_insecure_certs\n",
+ " | \n",
+ " | browser_version\n",
+ " | \n",
+ " | enable_downloads\n",
+ " | \n",
+ " | page_load_strategy\n",
+ " | \n",
+ " | platform_name\n",
+ " | \n",
+ " | proxy\n",
+ " | \n",
+ " | set_window_rect\n",
+ " | \n",
+ " | strict_file_interactability\n",
+ " | \n",
+ " | timeouts\n",
+ " | \n",
+ " | unhandled_prompt_behavior\n",
+ " \n",
+ " EdgeService = class Service(selenium.webdriver.chromium.service.ChromiumService)\n",
+ " | EdgeService(executable_path: str = None, port: int = 0, verbose: bool = False, log_output: Union[int, str, IO[Any]] = None, service_args: Optional[List[str]] = None, env: Optional[Mapping[str, str]] = None, **kwargs) -> None\n",
+ " | \n",
+ " | A Service class that is responsible for the starting and stopping of\n",
+ " | `msedgedriver`.\n",
+ " | \n",
+ " | :param executable_path: install path of the msedgedriver executable, defaults to `msedgedriver`.\n",
+ " | :param port: Port for the service to run on, defaults to 0 where the operating system will decide.\n",
+ " | :param verbose: (Deprecated) Whether to make the webdriver more verbose (passes the --verbose option to the binary).\n",
+ " | Defaults to False.\n",
+ " | :param log_output: (Optional) int representation of STDOUT/DEVNULL, any IO instance or String path to file.\n",
+ " | :param service_args: (Optional) List of args to be passed to the subprocess when launching the executable.\n",
+ " | :param env: (Optional) Mapping of environment variables for the new process, defaults to `os.environ`.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Service\n",
+ " | selenium.webdriver.chromium.service.ChromiumService\n",
+ " | selenium.webdriver.common.service.Service\n",
+ " | abc.ABC\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, executable_path: str = None, port: int = 0, verbose: bool = False, log_output: Union[int, str, IO[Any]] = None, service_args: Optional[List[str]] = None, env: Optional[Mapping[str, str]] = None, **kwargs) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.chromium.service.ChromiumService:\n",
+ " | \n",
+ " | command_line_args(self) -> List[str]\n",
+ " | A List of program arguments (excluding the executable).\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __del__(self) -> None\n",
+ " | \n",
+ " | assert_process_still_running(self) -> None\n",
+ " | Check if the underlying process is still running.\n",
+ " | \n",
+ " | is_connectable(self) -> bool\n",
+ " | Establishes a socket connection to determine if the service running\n",
+ " | on the port is accessible.\n",
+ " | \n",
+ " | send_remote_shutdown_command(self) -> None\n",
+ " | Dispatch an HTTP request to the shutdown endpoint for the service in\n",
+ " | an attempt to stop it.\n",
+ " | \n",
+ " | start(self) -> None\n",
+ " | Starts the Service.\n",
+ " | \n",
+ " | :Exceptions:\n",
+ " | - WebDriverException : Raised either when it can't start the service\n",
+ " | or when it can't connect to the service\n",
+ " | \n",
+ " | stop(self) -> None\n",
+ " | Stops the service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | service_url\n",
+ " | Gets the url of the Service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | path\n",
+ " \n",
+ " Firefox = class WebDriver(selenium.webdriver.remote.webdriver.WebDriver)\n",
+ " | Firefox(options: selenium.webdriver.firefox.options.Options = None, service: selenium.webdriver.firefox.service.Service = None, keep_alive=True) -> None\n",
+ " | \n",
+ " | Controls the GeckoDriver and allows you to drive the browser.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.BaseWebDriver\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, options: selenium.webdriver.firefox.options.Options = None, service: selenium.webdriver.firefox.service.Service = None, keep_alive=True) -> None\n",
+ " | Creates a new instance of the Firefox driver. Starts the service and\n",
+ " | then creates new instance of Firefox driver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - options - Instance of ``options.Options``.\n",
+ " | - service - (Optional) service instance for managing the starting and stopping of the driver.\n",
+ " | - keep_alive - Whether to configure remote_connection.RemoteConnection to use HTTP keep-alive.\n",
+ " | \n",
+ " | context(self, context)\n",
+ " | Sets the context that Selenium commands are running in using a\n",
+ " | `with` statement. The state of the context on the server is saved\n",
+ " | before entering the block, and restored upon exiting it.\n",
+ " | \n",
+ " | :param context: Context, may be one of the class properties\n",
+ " | `CONTEXT_CHROME` or `CONTEXT_CONTENT`.\n",
+ " | \n",
+ " | Usage example::\n",
+ " | \n",
+ " | with selenium.context(selenium.CONTEXT_CHROME):\n",
+ " | # chrome scope\n",
+ " | ... do stuff ...\n",
+ " | \n",
+ " | get_full_page_screenshot_as_base64(self) -> str\n",
+ " | Gets the full document screenshot of the current window as a base64\n",
+ " | encoded string which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_full_page_screenshot_as_base64()\n",
+ " | \n",
+ " | get_full_page_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a full document screenshot of the current window to a PNG\n",
+ " | image file. Returns False if there is any IOError, else returns True.\n",
+ " | Use full paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_full_page_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_full_page_screenshot_as_png(self) -> bytes\n",
+ " | Gets the full document screenshot of the current window as a binary\n",
+ " | data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_full_page_screenshot_as_png()\n",
+ " | \n",
+ " | install_addon(self, path, temporary=False) -> str\n",
+ " | Installs Firefox addon.\n",
+ " | \n",
+ " | Returns identifier of installed addon. This identifier can later\n",
+ " | be used to uninstall addon.\n",
+ " | \n",
+ " | :param temporary: allows you to load browser extensions temporarily during a session\n",
+ " | :param path: Absolute path to the addon that will be installed.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.install_addon('/path/to/firebug.xpi')\n",
+ " | \n",
+ " | quit(self) -> None\n",
+ " | Quits the driver and close every associated window.\n",
+ " | \n",
+ " | save_full_page_screenshot(self, filename) -> bool\n",
+ " | Saves a full document screenshot of the current window to a PNG\n",
+ " | image file. Returns False if there is any IOError, else returns True.\n",
+ " | Use full paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_full_page_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_context(self, context) -> None\n",
+ " | \n",
+ " | uninstall_addon(self, identifier) -> None\n",
+ " | Uninstalls Firefox addon using its identifier.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.uninstall_addon('addon@foo.com')\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | CONTEXT_CHROME = 'chrome'\n",
+ " | \n",
+ " | CONTEXT_CONTENT = 'content'\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | __enter__(self)\n",
+ " | \n",
+ " | __exit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], traceback: Optional[traceback])\n",
+ " | \n",
+ " | __repr__(self)\n",
+ " | Return repr(self).\n",
+ " | \n",
+ " | add_cookie(self, cookie_dict) -> None\n",
+ " | Adds a cookie to your current session.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cookie_dict: A dictionary object, with required keys - \"name\" and \"value\";\n",
+ " | optional keys - \"path\", \"domain\", \"secure\", \"httpOnly\", \"expiry\", \"sameSite\"\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure' : True})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'sameSite' : 'Strict'})\n",
+ " | \n",
+ " | add_credential(self, credential: selenium.webdriver.common.virtual_authenticator.Credential) -> None\n",
+ " | Injects a credential into the authenticator.\n",
+ " | \n",
+ " | add_virtual_authenticator(self, options: selenium.webdriver.common.virtual_authenticator.VirtualAuthenticatorOptions) -> None\n",
+ " | Adds a virtual authenticator with the given options.\n",
+ " | \n",
+ " | back(self) -> None\n",
+ " | Goes one step backward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.back()\n",
+ " | \n",
+ " | bidi_connection(self)\n",
+ " | \n",
+ " | close(self) -> None\n",
+ " | Closes the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.close()\n",
+ " | \n",
+ " | create_web_element(self, element_id: str) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Creates a web element with the specified `element_id`.\n",
+ " | \n",
+ " | delete_all_cookies(self) -> None\n",
+ " | Delete all cookies in the scope of the session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_all_cookies()\n",
+ " | \n",
+ " | delete_cookie(self, name) -> None\n",
+ " | Deletes a single cookie with the given name.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_cookie('my_cookie')\n",
+ " | \n",
+ " | delete_downloadable_files(self) -> None\n",
+ " | Deletes all downloadable files.\n",
+ " | \n",
+ " | download_file(self, file_name: str, target_directory: str) -> None\n",
+ " | Downloads a file with the specified file name to the target\n",
+ " | directory.\n",
+ " | \n",
+ " | file_name: The name of the file to download.\n",
+ " | target_directory: The path to the directory to save the downloaded file.\n",
+ " | \n",
+ " | execute(self, driver_command: str, params: dict = None) -> dict\n",
+ " | Sends a command to be executed by a command.CommandExecutor.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver_command: The name of the command to execute as a string.\n",
+ " | - params: A dictionary of named parameters to send with the command.\n",
+ " | \n",
+ " | :Returns:\n",
+ " | The command's JSON response loaded into a dictionary object.\n",
+ " | \n",
+ " | execute_async_script(self, script: str, *args)\n",
+ " | Asynchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | script = \"var callback = arguments[arguments.length - 1]; \" \\\n",
+ " | \"window.setTimeout(function(){ callback('timeout') }, 3000);\"\n",
+ " | driver.execute_async_script(script)\n",
+ " | \n",
+ " | execute_script(self, script, *args)\n",
+ " | Synchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_script('return document.title;')\n",
+ " | \n",
+ " | file_detector_context(self, file_detector_class, *args, **kwargs)\n",
+ " | Overrides the current file detector (if necessary) in limited\n",
+ " | context. Ensures the original file detector is set afterwards.\n",
+ " | \n",
+ " | Example::\n",
+ " | \n",
+ " | with webdriver.file_detector_context(UselessFileDetector):\n",
+ " | someinput.send_keys('/etc/hosts')\n",
+ " | \n",
+ " | :Args:\n",
+ " | - file_detector_class - Class of the desired file detector. If the class is different\n",
+ " | from the current file_detector, then the class is instantiated with args and kwargs\n",
+ " | and used as a file detector during the duration of the context manager.\n",
+ " | - args - Optional arguments that get passed to the file detector class during\n",
+ " | instantiation.\n",
+ " | - kwargs - Keyword arguments, passed the same way as args.\n",
+ " | \n",
+ " | find_element(self, by='id', value: Optional[str] = None) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Find an element given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.find_element(By.ID, 'foo')\n",
+ " | \n",
+ " | :rtype: WebElement\n",
+ " | \n",
+ " | find_elements(self, by='id', value: Optional[str] = None) -> List[selenium.webdriver.remote.webelement.WebElement]\n",
+ " | Find elements given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | elements = driver.find_elements(By.CLASS_NAME, 'foo')\n",
+ " | \n",
+ " | :rtype: list of WebElement\n",
+ " | \n",
+ " | forward(self) -> None\n",
+ " | Goes one step forward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.forward()\n",
+ " | \n",
+ " | fullscreen_window(self) -> None\n",
+ " | Invokes the window manager-specific 'full screen' operation.\n",
+ " | \n",
+ " | get(self, url: str) -> None\n",
+ " | Loads a web page in the current browser session.\n",
+ " | \n",
+ " | get_cookie(self, name) -> Optional[Dict]\n",
+ " | Get a single cookie by name. Returns the cookie if found, None if\n",
+ " | not.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookie('my_cookie')\n",
+ " | \n",
+ " | get_cookies(self) -> List[dict]\n",
+ " | Returns a set of dictionaries, corresponding to cookies visible in\n",
+ " | the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookies()\n",
+ " | \n",
+ " | get_credentials(self) -> List[selenium.webdriver.common.virtual_authenticator.Credential]\n",
+ " | Returns the list of credentials owned by the authenticator.\n",
+ " | \n",
+ " | get_downloadable_files(self) -> dict\n",
+ " | Retrieves the downloadable files as a map of file names and their\n",
+ " | corresponding URLs.\n",
+ " | \n",
+ " | get_log(self, log_type)\n",
+ " | Gets the log for a given log type.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - log_type: type of log that which will be returned\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_log('browser')\n",
+ " | driver.get_log('driver')\n",
+ " | driver.get_log('client')\n",
+ " | driver.get_log('server')\n",
+ " | \n",
+ " | get_pinned_scripts(self) -> List[str]\n",
+ " | \n",
+ " | get_screenshot_as_base64(self) -> str\n",
+ " | Gets the screenshot of the current window as a base64 encoded string\n",
+ " | which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_base64()\n",
+ " | \n",
+ " | get_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_screenshot_as_png(self) -> bytes\n",
+ " | Gets the screenshot of the current window as a binary data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_png()\n",
+ " | \n",
+ " | get_window_position(self, windowHandle='current') -> dict\n",
+ " | Gets the x,y position of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_position()\n",
+ " | \n",
+ " | get_window_rect(self) -> dict\n",
+ " | Gets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_rect()\n",
+ " | \n",
+ " | get_window_size(self, windowHandle: str = 'current') -> dict\n",
+ " | Gets the width and height of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_size()\n",
+ " | \n",
+ " | implicitly_wait(self, time_to_wait: float) -> None\n",
+ " | Sets a sticky timeout to implicitly wait for an element to be found,\n",
+ " | or a command to complete. This method only needs to be called one time\n",
+ " | per session. To set the timeout for calls to execute_async_script, see\n",
+ " | set_script_timeout.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: Amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.implicitly_wait(30)\n",
+ " | \n",
+ " | maximize_window(self) -> None\n",
+ " | Maximizes the current window that webdriver is using.\n",
+ " | \n",
+ " | minimize_window(self) -> None\n",
+ " | Invokes the window manager-specific 'minimize' operation.\n",
+ " | \n",
+ " | pin_script(self, script: str, script_key=None) -> selenium.webdriver.remote.script_key.ScriptKey\n",
+ " | Store common javascript scripts to be executed later by a unique\n",
+ " | hashable ID.\n",
+ " | \n",
+ " | print_page(self, print_options: Optional[selenium.webdriver.common.print_page_options.PrintOptions] = None) -> str\n",
+ " | Takes PDF of the current page.\n",
+ " | \n",
+ " | The driver makes a best effort to return a PDF based on the\n",
+ " | provided parameters.\n",
+ " | \n",
+ " | refresh(self) -> None\n",
+ " | Refreshes the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.refresh()\n",
+ " | \n",
+ " | remove_all_credentials(self) -> None\n",
+ " | Removes all credentials from the authenticator.\n",
+ " | \n",
+ " | remove_credential(self, credential_id: Union[str, bytearray]) -> None\n",
+ " | Removes a credential from the authenticator.\n",
+ " | \n",
+ " | remove_virtual_authenticator(self) -> None\n",
+ " | Removes a previously added virtual authenticator.\n",
+ " | \n",
+ " | The authenticator is no longer valid after removal, so no\n",
+ " | methods may be called.\n",
+ " | \n",
+ " | save_screenshot(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_page_load_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time to wait for a page load to complete before\n",
+ " | throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_page_load_timeout(30)\n",
+ " | \n",
+ " | set_script_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time that the script should wait during an\n",
+ " | execute_async_script call before throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_script_timeout(30)\n",
+ " | \n",
+ " | set_user_verified(self, verified: bool) -> None\n",
+ " | Sets whether the authenticator will simulate success or fail on user\n",
+ " | verification.\n",
+ " | \n",
+ " | verified: True if the authenticator will pass user verification, False otherwise.\n",
+ " | \n",
+ " | set_window_position(self, x, y, windowHandle: str = 'current') -> dict\n",
+ " | Sets the x,y position of the current window. (window.moveTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - x: the x-coordinate in pixels to set the window position\n",
+ " | - y: the y-coordinate in pixels to set the window position\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_position(0,0)\n",
+ " | \n",
+ " | set_window_rect(self, x=None, y=None, width=None, height=None) -> dict\n",
+ " | Sets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window. This method is only supported for W3C compatible\n",
+ " | browsers; other browsers should use `set_window_position` and\n",
+ " | `set_window_size`.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_rect(x=10, y=10)\n",
+ " | driver.set_window_rect(width=100, height=200)\n",
+ " | driver.set_window_rect(x=10, y=10, width=100, height=200)\n",
+ " | \n",
+ " | set_window_size(self, width, height, windowHandle: str = 'current') -> None\n",
+ " | Sets the width and height of the current window. (window.resizeTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - width: the width in pixels to set the window to\n",
+ " | - height: the height in pixels to set the window to\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_size(800,600)\n",
+ " | \n",
+ " | start_client(self)\n",
+ " | Called before starting a new session.\n",
+ " | \n",
+ " | This method may be overridden to define custom startup behavior.\n",
+ " | \n",
+ " | start_session(self, capabilities: dict) -> None\n",
+ " | Creates a new session with the desired capabilities.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - capabilities - a capabilities dict to start the session with.\n",
+ " | \n",
+ " | stop_client(self)\n",
+ " | Called after executing a quit command.\n",
+ " | \n",
+ " | This method may be overridden to define custom shutdown\n",
+ " | behavior.\n",
+ " | \n",
+ " | unpin(self, script_key: selenium.webdriver.remote.script_key.ScriptKey) -> None\n",
+ " | Remove a pinned script from storage.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | application_cache\n",
+ " | Returns a ApplicationCache Object to interact with the browser app\n",
+ " | cache.\n",
+ " | \n",
+ " | capabilities\n",
+ " | Returns the drivers current capabilities being used.\n",
+ " | \n",
+ " | current_url\n",
+ " | Gets the URL of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_url\n",
+ " | \n",
+ " | current_window_handle\n",
+ " | Returns the handle of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_window_handle\n",
+ " | \n",
+ " | desired_capabilities\n",
+ " | Returns the drivers current desired capabilities being used.\n",
+ " | \n",
+ " | log_types\n",
+ " | Gets a list of the available log types. This only works with w3c\n",
+ " | compliant browsers.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.log_types\n",
+ " | \n",
+ " | mobile\n",
+ " | \n",
+ " | name\n",
+ " | Returns the name of the underlying browser for this instance.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | name = driver.name\n",
+ " | \n",
+ " | page_source\n",
+ " | Gets the source of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.page_source\n",
+ " | \n",
+ " | switch_to\n",
+ " | :Returns:\n",
+ " | - SwitchTo: an object containing all options to switch focus into\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.switch_to.active_element\n",
+ " | alert = driver.switch_to.alert\n",
+ " | driver.switch_to.default_content()\n",
+ " | driver.switch_to.frame('frame_name')\n",
+ " | driver.switch_to.frame(1)\n",
+ " | driver.switch_to.frame(driver.find_elements(By.TAG_NAME, \"iframe\")[0])\n",
+ " | driver.switch_to.parent_frame()\n",
+ " | driver.switch_to.window('main')\n",
+ " | \n",
+ " | title\n",
+ " | Returns the title of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | title = driver.title\n",
+ " | \n",
+ " | virtual_authenticator_id\n",
+ " | Returns the id of the virtual authenticator.\n",
+ " | \n",
+ " | window_handles\n",
+ " | Returns the handles of all windows within the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.window_handles\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | file_detector\n",
+ " | \n",
+ " | orientation\n",
+ " | Gets the current orientation of the device.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | orientation = driver.orientation\n",
+ " | \n",
+ " | timeouts\n",
+ " | Get all the timeouts that have been set on the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.timeouts\n",
+ " | :rtype: Timeout\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.BaseWebDriver:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " FirefoxOptions = class Options(selenium.webdriver.common.options.ArgOptions)\n",
+ " | FirefoxOptions() -> None\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Options\n",
+ " | selenium.webdriver.common.options.ArgOptions\n",
+ " | selenium.webdriver.common.options.BaseOptions\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | enable_mobile(self, android_package: str = 'org.mozilla.firefox', android_activity=None, device_serial=None)\n",
+ " | Enables mobile browser use for browsers that support it.\n",
+ " | \n",
+ " | :Args:\n",
+ " | android_activity: The name of the android package to start\n",
+ " | \n",
+ " | set_preference(self, name: str, value: Union[str, int, bool])\n",
+ " | Sets a preference.\n",
+ " | \n",
+ " | to_capabilities(self) -> dict\n",
+ " | Marshals the Firefox options to a `moz:firefoxOptions` object.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties defined here:\n",
+ " | \n",
+ " | default_capabilities\n",
+ " | Return minimal capabilities necessary as a dictionary.\n",
+ " | \n",
+ " | preferences\n",
+ " | :Returns: A dict of preferences.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | binary\n",
+ " | Returns the FirefoxBinary instance.\n",
+ " | \n",
+ " | binary_location\n",
+ " | :Returns: The location of the binary.\n",
+ " | \n",
+ " | profile\n",
+ " | :Returns: The Firefox profile to use.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | KEY = 'moz:firefoxOptions'\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | add_argument(self, argument)\n",
+ " | Adds an argument to the list.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - Sets the arguments\n",
+ " | \n",
+ " | ignore_local_proxy_environment_variables(self) -> None\n",
+ " | By calling this you will ignore HTTP_PROXY and HTTPS_PROXY from\n",
+ " | being picked up and used.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | arguments\n",
+ " | :Returns: A list of arguments needed for the browser.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | BINARY_LOCATION_ERROR = 'Binary Location Must be a String'\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | set_capability(self, name, value) -> None\n",
+ " | Sets a capability.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | capabilities\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | accept_insecure_certs\n",
+ " | \n",
+ " | browser_version\n",
+ " | \n",
+ " | enable_downloads\n",
+ " | \n",
+ " | page_load_strategy\n",
+ " | \n",
+ " | platform_name\n",
+ " | \n",
+ " | proxy\n",
+ " | \n",
+ " | set_window_rect\n",
+ " | \n",
+ " | strict_file_interactability\n",
+ " | \n",
+ " | timeouts\n",
+ " | \n",
+ " | unhandled_prompt_behavior\n",
+ " \n",
+ " class FirefoxProfile(builtins.object)\n",
+ " | FirefoxProfile(profile_directory=None)\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, profile_directory=None)\n",
+ " | Initialises a new instance of a Firefox Profile.\n",
+ " | \n",
+ " | :args:\n",
+ " | - profile_directory: Directory of profile that you want to use. If a\n",
+ " | directory is passed in it will be cloned and the cloned directory\n",
+ " | will be used by the driver when instantiated.\n",
+ " | This defaults to None and will create a new\n",
+ " | directory when object is created.\n",
+ " | \n",
+ " | add_extension(self, extension='webdriver.xpi')\n",
+ " | \n",
+ " | set_preference(self, key, value)\n",
+ " | Sets the preference that we want in the profile.\n",
+ " | \n",
+ " | update_preferences(self)\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties defined here:\n",
+ " | \n",
+ " | encoded\n",
+ " | A zipped, base64 encoded string of profile directory for use with\n",
+ " | remote WebDriver JSON wire protocol.\n",
+ " | \n",
+ " | path\n",
+ " | Gets the profile directory that is currently being used.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | accept_untrusted_certs\n",
+ " | \n",
+ " | assume_untrusted_cert_issuer\n",
+ " | \n",
+ " | port\n",
+ " | Gets the port that WebDriver is working on.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | ANONYMOUS_PROFILE_NAME = 'WEBDRIVER_ANONYMOUS_PROFILE'\n",
+ " | \n",
+ " | DEFAULT_PREFERENCES = None\n",
+ " \n",
+ " FirefoxService = class Service(selenium.webdriver.common.service.Service)\n",
+ " | FirefoxService(executable_path: str = None, port: int = 0, service_args: Optional[List[str]] = None, log_output: Union[int, str, IO[Any]] = None, env: Optional[Mapping[str, str]] = None, **kwargs) -> None\n",
+ " | \n",
+ " | A Service class that is responsible for the starting and stopping of\n",
+ " | `geckodriver`.\n",
+ " | \n",
+ " | :param executable_path: install path of the geckodriver executable, defaults to `geckodriver`.\n",
+ " | :param port: Port for the service to run on, defaults to 0 where the operating system will decide.\n",
+ " | :param service_args: (Optional) List of args to be passed to the subprocess when launching the executable.\n",
+ " | :param log_output: (Optional) int representation of STDOUT/DEVNULL, any IO instance or String path to file.\n",
+ " | :param env: (Optional) Mapping of environment variables for the new process, defaults to `os.environ`.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Service\n",
+ " | selenium.webdriver.common.service.Service\n",
+ " | abc.ABC\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, executable_path: str = None, port: int = 0, service_args: Optional[List[str]] = None, log_output: Union[int, str, IO[Any]] = None, env: Optional[Mapping[str, str]] = None, **kwargs) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | command_line_args(self) -> List[str]\n",
+ " | A List of program arguments (excluding the executable).\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __del__(self) -> None\n",
+ " | \n",
+ " | assert_process_still_running(self) -> None\n",
+ " | Check if the underlying process is still running.\n",
+ " | \n",
+ " | is_connectable(self) -> bool\n",
+ " | Establishes a socket connection to determine if the service running\n",
+ " | on the port is accessible.\n",
+ " | \n",
+ " | send_remote_shutdown_command(self) -> None\n",
+ " | Dispatch an HTTP request to the shutdown endpoint for the service in\n",
+ " | an attempt to stop it.\n",
+ " | \n",
+ " | start(self) -> None\n",
+ " | Starts the Service.\n",
+ " | \n",
+ " | :Exceptions:\n",
+ " | - WebDriverException : Raised either when it can't start the service\n",
+ " | or when it can't connect to the service\n",
+ " | \n",
+ " | stop(self) -> None\n",
+ " | Stops the service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | service_url\n",
+ " | Gets the url of the Service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | path\n",
+ " \n",
+ " Ie = class WebDriver(selenium.webdriver.remote.webdriver.WebDriver)\n",
+ " | Ie(options: selenium.webdriver.ie.options.Options = None, service: selenium.webdriver.ie.service.Service = None, keep_alive=True) -> None\n",
+ " | \n",
+ " | Controls the IEServerDriver and allows you to drive Internet\n",
+ " | Explorer.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.BaseWebDriver\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, options: selenium.webdriver.ie.options.Options = None, service: selenium.webdriver.ie.service.Service = None, keep_alive=True) -> None\n",
+ " | Creates a new instance of the Ie driver.\n",
+ " | \n",
+ " | Starts the service and then creates new instance of Ie driver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - options - IE Options instance, providing additional IE options\n",
+ " | - service - (Optional) service instance for managing the starting and stopping of the driver.\n",
+ " | - keep_alive - Deprecated: Whether to configure RemoteConnection to use HTTP keep-alive.\n",
+ " | \n",
+ " | quit(self) -> None\n",
+ " | Quits the driver and closes every associated window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.quit()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | __enter__(self)\n",
+ " | \n",
+ " | __exit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], traceback: Optional[traceback])\n",
+ " | \n",
+ " | __repr__(self)\n",
+ " | Return repr(self).\n",
+ " | \n",
+ " | add_cookie(self, cookie_dict) -> None\n",
+ " | Adds a cookie to your current session.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cookie_dict: A dictionary object, with required keys - \"name\" and \"value\";\n",
+ " | optional keys - \"path\", \"domain\", \"secure\", \"httpOnly\", \"expiry\", \"sameSite\"\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure' : True})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'sameSite' : 'Strict'})\n",
+ " | \n",
+ " | add_credential(self, credential: selenium.webdriver.common.virtual_authenticator.Credential) -> None\n",
+ " | Injects a credential into the authenticator.\n",
+ " | \n",
+ " | add_virtual_authenticator(self, options: selenium.webdriver.common.virtual_authenticator.VirtualAuthenticatorOptions) -> None\n",
+ " | Adds a virtual authenticator with the given options.\n",
+ " | \n",
+ " | back(self) -> None\n",
+ " | Goes one step backward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.back()\n",
+ " | \n",
+ " | bidi_connection(self)\n",
+ " | \n",
+ " | close(self) -> None\n",
+ " | Closes the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.close()\n",
+ " | \n",
+ " | create_web_element(self, element_id: str) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Creates a web element with the specified `element_id`.\n",
+ " | \n",
+ " | delete_all_cookies(self) -> None\n",
+ " | Delete all cookies in the scope of the session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_all_cookies()\n",
+ " | \n",
+ " | delete_cookie(self, name) -> None\n",
+ " | Deletes a single cookie with the given name.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_cookie('my_cookie')\n",
+ " | \n",
+ " | delete_downloadable_files(self) -> None\n",
+ " | Deletes all downloadable files.\n",
+ " | \n",
+ " | download_file(self, file_name: str, target_directory: str) -> None\n",
+ " | Downloads a file with the specified file name to the target\n",
+ " | directory.\n",
+ " | \n",
+ " | file_name: The name of the file to download.\n",
+ " | target_directory: The path to the directory to save the downloaded file.\n",
+ " | \n",
+ " | execute(self, driver_command: str, params: dict = None) -> dict\n",
+ " | Sends a command to be executed by a command.CommandExecutor.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver_command: The name of the command to execute as a string.\n",
+ " | - params: A dictionary of named parameters to send with the command.\n",
+ " | \n",
+ " | :Returns:\n",
+ " | The command's JSON response loaded into a dictionary object.\n",
+ " | \n",
+ " | execute_async_script(self, script: str, *args)\n",
+ " | Asynchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | script = \"var callback = arguments[arguments.length - 1]; \" \\\n",
+ " | \"window.setTimeout(function(){ callback('timeout') }, 3000);\"\n",
+ " | driver.execute_async_script(script)\n",
+ " | \n",
+ " | execute_script(self, script, *args)\n",
+ " | Synchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_script('return document.title;')\n",
+ " | \n",
+ " | file_detector_context(self, file_detector_class, *args, **kwargs)\n",
+ " | Overrides the current file detector (if necessary) in limited\n",
+ " | context. Ensures the original file detector is set afterwards.\n",
+ " | \n",
+ " | Example::\n",
+ " | \n",
+ " | with webdriver.file_detector_context(UselessFileDetector):\n",
+ " | someinput.send_keys('/etc/hosts')\n",
+ " | \n",
+ " | :Args:\n",
+ " | - file_detector_class - Class of the desired file detector. If the class is different\n",
+ " | from the current file_detector, then the class is instantiated with args and kwargs\n",
+ " | and used as a file detector during the duration of the context manager.\n",
+ " | - args - Optional arguments that get passed to the file detector class during\n",
+ " | instantiation.\n",
+ " | - kwargs - Keyword arguments, passed the same way as args.\n",
+ " | \n",
+ " | find_element(self, by='id', value: Optional[str] = None) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Find an element given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.find_element(By.ID, 'foo')\n",
+ " | \n",
+ " | :rtype: WebElement\n",
+ " | \n",
+ " | find_elements(self, by='id', value: Optional[str] = None) -> List[selenium.webdriver.remote.webelement.WebElement]\n",
+ " | Find elements given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | elements = driver.find_elements(By.CLASS_NAME, 'foo')\n",
+ " | \n",
+ " | :rtype: list of WebElement\n",
+ " | \n",
+ " | forward(self) -> None\n",
+ " | Goes one step forward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.forward()\n",
+ " | \n",
+ " | fullscreen_window(self) -> None\n",
+ " | Invokes the window manager-specific 'full screen' operation.\n",
+ " | \n",
+ " | get(self, url: str) -> None\n",
+ " | Loads a web page in the current browser session.\n",
+ " | \n",
+ " | get_cookie(self, name) -> Optional[Dict]\n",
+ " | Get a single cookie by name. Returns the cookie if found, None if\n",
+ " | not.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookie('my_cookie')\n",
+ " | \n",
+ " | get_cookies(self) -> List[dict]\n",
+ " | Returns a set of dictionaries, corresponding to cookies visible in\n",
+ " | the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookies()\n",
+ " | \n",
+ " | get_credentials(self) -> List[selenium.webdriver.common.virtual_authenticator.Credential]\n",
+ " | Returns the list of credentials owned by the authenticator.\n",
+ " | \n",
+ " | get_downloadable_files(self) -> dict\n",
+ " | Retrieves the downloadable files as a map of file names and their\n",
+ " | corresponding URLs.\n",
+ " | \n",
+ " | get_log(self, log_type)\n",
+ " | Gets the log for a given log type.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - log_type: type of log that which will be returned\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_log('browser')\n",
+ " | driver.get_log('driver')\n",
+ " | driver.get_log('client')\n",
+ " | driver.get_log('server')\n",
+ " | \n",
+ " | get_pinned_scripts(self) -> List[str]\n",
+ " | \n",
+ " | get_screenshot_as_base64(self) -> str\n",
+ " | Gets the screenshot of the current window as a base64 encoded string\n",
+ " | which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_base64()\n",
+ " | \n",
+ " | get_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_screenshot_as_png(self) -> bytes\n",
+ " | Gets the screenshot of the current window as a binary data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_png()\n",
+ " | \n",
+ " | get_window_position(self, windowHandle='current') -> dict\n",
+ " | Gets the x,y position of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_position()\n",
+ " | \n",
+ " | get_window_rect(self) -> dict\n",
+ " | Gets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_rect()\n",
+ " | \n",
+ " | get_window_size(self, windowHandle: str = 'current') -> dict\n",
+ " | Gets the width and height of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_size()\n",
+ " | \n",
+ " | implicitly_wait(self, time_to_wait: float) -> None\n",
+ " | Sets a sticky timeout to implicitly wait for an element to be found,\n",
+ " | or a command to complete. This method only needs to be called one time\n",
+ " | per session. To set the timeout for calls to execute_async_script, see\n",
+ " | set_script_timeout.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: Amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.implicitly_wait(30)\n",
+ " | \n",
+ " | maximize_window(self) -> None\n",
+ " | Maximizes the current window that webdriver is using.\n",
+ " | \n",
+ " | minimize_window(self) -> None\n",
+ " | Invokes the window manager-specific 'minimize' operation.\n",
+ " | \n",
+ " | pin_script(self, script: str, script_key=None) -> selenium.webdriver.remote.script_key.ScriptKey\n",
+ " | Store common javascript scripts to be executed later by a unique\n",
+ " | hashable ID.\n",
+ " | \n",
+ " | print_page(self, print_options: Optional[selenium.webdriver.common.print_page_options.PrintOptions] = None) -> str\n",
+ " | Takes PDF of the current page.\n",
+ " | \n",
+ " | The driver makes a best effort to return a PDF based on the\n",
+ " | provided parameters.\n",
+ " | \n",
+ " | refresh(self) -> None\n",
+ " | Refreshes the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.refresh()\n",
+ " | \n",
+ " | remove_all_credentials(self) -> None\n",
+ " | Removes all credentials from the authenticator.\n",
+ " | \n",
+ " | remove_credential(self, credential_id: Union[str, bytearray]) -> None\n",
+ " | Removes a credential from the authenticator.\n",
+ " | \n",
+ " | remove_virtual_authenticator(self) -> None\n",
+ " | Removes a previously added virtual authenticator.\n",
+ " | \n",
+ " | The authenticator is no longer valid after removal, so no\n",
+ " | methods may be called.\n",
+ " | \n",
+ " | save_screenshot(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_page_load_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time to wait for a page load to complete before\n",
+ " | throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_page_load_timeout(30)\n",
+ " | \n",
+ " | set_script_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time that the script should wait during an\n",
+ " | execute_async_script call before throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_script_timeout(30)\n",
+ " | \n",
+ " | set_user_verified(self, verified: bool) -> None\n",
+ " | Sets whether the authenticator will simulate success or fail on user\n",
+ " | verification.\n",
+ " | \n",
+ " | verified: True if the authenticator will pass user verification, False otherwise.\n",
+ " | \n",
+ " | set_window_position(self, x, y, windowHandle: str = 'current') -> dict\n",
+ " | Sets the x,y position of the current window. (window.moveTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - x: the x-coordinate in pixels to set the window position\n",
+ " | - y: the y-coordinate in pixels to set the window position\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_position(0,0)\n",
+ " | \n",
+ " | set_window_rect(self, x=None, y=None, width=None, height=None) -> dict\n",
+ " | Sets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window. This method is only supported for W3C compatible\n",
+ " | browsers; other browsers should use `set_window_position` and\n",
+ " | `set_window_size`.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_rect(x=10, y=10)\n",
+ " | driver.set_window_rect(width=100, height=200)\n",
+ " | driver.set_window_rect(x=10, y=10, width=100, height=200)\n",
+ " | \n",
+ " | set_window_size(self, width, height, windowHandle: str = 'current') -> None\n",
+ " | Sets the width and height of the current window. (window.resizeTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - width: the width in pixels to set the window to\n",
+ " | - height: the height in pixels to set the window to\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_size(800,600)\n",
+ " | \n",
+ " | start_client(self)\n",
+ " | Called before starting a new session.\n",
+ " | \n",
+ " | This method may be overridden to define custom startup behavior.\n",
+ " | \n",
+ " | start_session(self, capabilities: dict) -> None\n",
+ " | Creates a new session with the desired capabilities.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - capabilities - a capabilities dict to start the session with.\n",
+ " | \n",
+ " | stop_client(self)\n",
+ " | Called after executing a quit command.\n",
+ " | \n",
+ " | This method may be overridden to define custom shutdown\n",
+ " | behavior.\n",
+ " | \n",
+ " | unpin(self, script_key: selenium.webdriver.remote.script_key.ScriptKey) -> None\n",
+ " | Remove a pinned script from storage.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | application_cache\n",
+ " | Returns a ApplicationCache Object to interact with the browser app\n",
+ " | cache.\n",
+ " | \n",
+ " | capabilities\n",
+ " | Returns the drivers current capabilities being used.\n",
+ " | \n",
+ " | current_url\n",
+ " | Gets the URL of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_url\n",
+ " | \n",
+ " | current_window_handle\n",
+ " | Returns the handle of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_window_handle\n",
+ " | \n",
+ " | desired_capabilities\n",
+ " | Returns the drivers current desired capabilities being used.\n",
+ " | \n",
+ " | log_types\n",
+ " | Gets a list of the available log types. This only works with w3c\n",
+ " | compliant browsers.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.log_types\n",
+ " | \n",
+ " | mobile\n",
+ " | \n",
+ " | name\n",
+ " | Returns the name of the underlying browser for this instance.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | name = driver.name\n",
+ " | \n",
+ " | page_source\n",
+ " | Gets the source of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.page_source\n",
+ " | \n",
+ " | switch_to\n",
+ " | :Returns:\n",
+ " | - SwitchTo: an object containing all options to switch focus into\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.switch_to.active_element\n",
+ " | alert = driver.switch_to.alert\n",
+ " | driver.switch_to.default_content()\n",
+ " | driver.switch_to.frame('frame_name')\n",
+ " | driver.switch_to.frame(1)\n",
+ " | driver.switch_to.frame(driver.find_elements(By.TAG_NAME, \"iframe\")[0])\n",
+ " | driver.switch_to.parent_frame()\n",
+ " | driver.switch_to.window('main')\n",
+ " | \n",
+ " | title\n",
+ " | Returns the title of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | title = driver.title\n",
+ " | \n",
+ " | virtual_authenticator_id\n",
+ " | Returns the id of the virtual authenticator.\n",
+ " | \n",
+ " | window_handles\n",
+ " | Returns the handles of all windows within the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.window_handles\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | file_detector\n",
+ " | \n",
+ " | orientation\n",
+ " | Gets the current orientation of the device.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | orientation = driver.orientation\n",
+ " | \n",
+ " | timeouts\n",
+ " | Get all the timeouts that have been set on the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.timeouts\n",
+ " | :rtype: Timeout\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.BaseWebDriver:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " IeOptions = class Options(selenium.webdriver.common.options.ArgOptions)\n",
+ " | IeOptions() -> None\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Options\n",
+ " | selenium.webdriver.common.options.ArgOptions\n",
+ " | selenium.webdriver.common.options.BaseOptions\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | add_additional_option(self, name: str, value)\n",
+ " | Adds an additional option not yet added as a safe option for IE.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - name: name of the option to add\n",
+ " | - value: value of the option to add\n",
+ " | \n",
+ " | to_capabilities(self) -> dict\n",
+ " | Marshals the IE options to the correct object.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties defined here:\n",
+ " | \n",
+ " | additional_options\n",
+ " | :Returns: The additional options.\n",
+ " | \n",
+ " | default_capabilities\n",
+ " | Return minimal capabilities necessary as a dictionary.\n",
+ " | \n",
+ " | options\n",
+ " | :Returns: A dictionary of browser options.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | attach_to_edge_chrome\n",
+ " | \n",
+ " | browser_attach_timeout\n",
+ " | \n",
+ " | edge_executable_path\n",
+ " | \n",
+ " | element_scroll_behavior\n",
+ " | \n",
+ " | ensure_clean_session\n",
+ " | \n",
+ " | file_upload_dialog_timeout\n",
+ " | \n",
+ " | force_create_process_api\n",
+ " | \n",
+ " | force_shell_windows_api\n",
+ " | \n",
+ " | full_page_screenshot\n",
+ " | \n",
+ " | ignore_protected_mode_settings\n",
+ " | \n",
+ " | ignore_zoom_level\n",
+ " | \n",
+ " | initial_browser_url\n",
+ " | \n",
+ " | native_events\n",
+ " | \n",
+ " | persistent_hover\n",
+ " | \n",
+ " | require_window_focus\n",
+ " | \n",
+ " | use_legacy_file_upload_dialog_handling\n",
+ " | \n",
+ " | use_per_process_proxy\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | ATTACH_TO_EDGE_CHROME = 'ie.edgechromium'\n",
+ " | \n",
+ " | BROWSER_ATTACH_TIMEOUT = 'browserAttachTimeout'\n",
+ " | \n",
+ " | EDGE_EXECUTABLE_PATH = 'ie.edgepath'\n",
+ " | \n",
+ " | ELEMENT_SCROLL_BEHAVIOR = 'elementScrollBehavior'\n",
+ " | \n",
+ " | ENSURE_CLEAN_SESSION = 'ie.ensureCleanSession'\n",
+ " | \n",
+ " | FILE_UPLOAD_DIALOG_TIMEOUT = 'ie.fileUploadDialogTimeout'\n",
+ " | \n",
+ " | FORCE_CREATE_PROCESS_API = 'ie.forceCreateProcessApi'\n",
+ " | \n",
+ " | FORCE_SHELL_WINDOWS_API = 'ie.forceShellWindowsApi'\n",
+ " | \n",
+ " | FULL_PAGE_SCREENSHOT = 'ie.enableFullPageScreenshot'\n",
+ " | \n",
+ " | IGNORE_PROCESS_MATCH = 'ie.ignoreprocessmatch'\n",
+ " | \n",
+ " | IGNORE_PROTECTED_MODE_SETTINGS = 'ignoreProtectedModeSettings'\n",
+ " | \n",
+ " | IGNORE_ZOOM_LEVEL = 'ignoreZoomSetting'\n",
+ " | \n",
+ " | INITIAL_BROWSER_URL = 'initialBrowserUrl'\n",
+ " | \n",
+ " | KEY = 'se:ieOptions'\n",
+ " | \n",
+ " | NATIVE_EVENTS = 'nativeEvents'\n",
+ " | \n",
+ " | PERSISTENT_HOVER = 'enablePersistentHover'\n",
+ " | \n",
+ " | REQUIRE_WINDOW_FOCUS = 'requireWindowFocus'\n",
+ " | \n",
+ " | SWITCHES = 'ie.browserCommandLineSwitches'\n",
+ " | \n",
+ " | USE_LEGACY_FILE_UPLOAD_DIALOG_HANDLING = 'ie.useLegacyFileUploadDialog...\n",
+ " | \n",
+ " | USE_PER_PROCESS_PROXY = 'ie.usePerProcessProxy'\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | add_argument(self, argument)\n",
+ " | Adds an argument to the list.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - Sets the arguments\n",
+ " | \n",
+ " | ignore_local_proxy_environment_variables(self) -> None\n",
+ " | By calling this you will ignore HTTP_PROXY and HTTPS_PROXY from\n",
+ " | being picked up and used.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | arguments\n",
+ " | :Returns: A list of arguments needed for the browser.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | BINARY_LOCATION_ERROR = 'Binary Location Must be a String'\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | enable_mobile(self, android_package: Optional[str] = None, android_activity: Optional[str] = None, device_serial: Optional[str] = None) -> None\n",
+ " | Enables mobile browser use for browsers that support it.\n",
+ " | \n",
+ " | :Args:\n",
+ " | android_activity: The name of the android package to start\n",
+ " | \n",
+ " | set_capability(self, name, value) -> None\n",
+ " | Sets a capability.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | capabilities\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | accept_insecure_certs\n",
+ " | \n",
+ " | browser_version\n",
+ " | \n",
+ " | enable_downloads\n",
+ " | \n",
+ " | page_load_strategy\n",
+ " | \n",
+ " | platform_name\n",
+ " | \n",
+ " | proxy\n",
+ " | \n",
+ " | set_window_rect\n",
+ " | \n",
+ " | strict_file_interactability\n",
+ " | \n",
+ " | timeouts\n",
+ " | \n",
+ " | unhandled_prompt_behavior\n",
+ " \n",
+ " IeService = class Service(selenium.webdriver.common.service.Service)\n",
+ " | IeService(executable_path: str = None, port: int = 0, host: Optional[str] = None, service_args: Optional[List[str]] = None, log_level: Optional[str] = None, log_output: Union[int, str, IO[Any]] = None, **kwargs) -> None\n",
+ " | \n",
+ " | Object that manages the starting and stopping of the IEDriver.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Service\n",
+ " | selenium.webdriver.common.service.Service\n",
+ " | abc.ABC\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, executable_path: str = None, port: int = 0, host: Optional[str] = None, service_args: Optional[List[str]] = None, log_level: Optional[str] = None, log_output: Union[int, str, IO[Any]] = None, **kwargs) -> None\n",
+ " | Creates a new instance of the Service.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - executable_path : Path to the IEDriver\n",
+ " | - port : Port the service is running on\n",
+ " | - host : IP address the service port is bound\n",
+ " | - log_level : Level of logging of service, may be \"FATAL\", \"ERROR\", \"WARN\", \"INFO\", \"DEBUG\", \"TRACE\".\n",
+ " | Default is \"FATAL\".\n",
+ " | - log_output: (Optional) int representation of STDOUT/DEVNULL, any IO instance or String path to file.\n",
+ " | Default is \"stdout\".\n",
+ " | \n",
+ " | command_line_args(self) -> List[str]\n",
+ " | A List of program arguments (excluding the executable).\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __del__(self) -> None\n",
+ " | \n",
+ " | assert_process_still_running(self) -> None\n",
+ " | Check if the underlying process is still running.\n",
+ " | \n",
+ " | is_connectable(self) -> bool\n",
+ " | Establishes a socket connection to determine if the service running\n",
+ " | on the port is accessible.\n",
+ " | \n",
+ " | send_remote_shutdown_command(self) -> None\n",
+ " | Dispatch an HTTP request to the shutdown endpoint for the service in\n",
+ " | an attempt to stop it.\n",
+ " | \n",
+ " | start(self) -> None\n",
+ " | Starts the Service.\n",
+ " | \n",
+ " | :Exceptions:\n",
+ " | - WebDriverException : Raised either when it can't start the service\n",
+ " | or when it can't connect to the service\n",
+ " | \n",
+ " | stop(self) -> None\n",
+ " | Stops the service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | service_url\n",
+ " | Gets the url of the Service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | path\n",
+ " \n",
+ " class Keys(builtins.object)\n",
+ " | Set of special keys codes.\n",
+ " | \n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | ADD = '\\ue025'\n",
+ " | \n",
+ " | ALT = '\\ue00a'\n",
+ " | \n",
+ " | ARROW_DOWN = '\\ue015'\n",
+ " | \n",
+ " | ARROW_LEFT = '\\ue012'\n",
+ " | \n",
+ " | ARROW_RIGHT = '\\ue014'\n",
+ " | \n",
+ " | ARROW_UP = '\\ue013'\n",
+ " | \n",
+ " | BACKSPACE = '\\ue003'\n",
+ " | \n",
+ " | BACK_SPACE = '\\ue003'\n",
+ " | \n",
+ " | CANCEL = '\\ue001'\n",
+ " | \n",
+ " | CLEAR = '\\ue005'\n",
+ " | \n",
+ " | COMMAND = '\\ue03d'\n",
+ " | \n",
+ " | CONTROL = '\\ue009'\n",
+ " | \n",
+ " | DECIMAL = '\\ue028'\n",
+ " | \n",
+ " | DELETE = '\\ue017'\n",
+ " | \n",
+ " | DIVIDE = '\\ue029'\n",
+ " | \n",
+ " | DOWN = '\\ue015'\n",
+ " | \n",
+ " | END = '\\ue010'\n",
+ " | \n",
+ " | ENTER = '\\ue007'\n",
+ " | \n",
+ " | EQUALS = '\\ue019'\n",
+ " | \n",
+ " | ESCAPE = '\\ue00c'\n",
+ " | \n",
+ " | F1 = '\\ue031'\n",
+ " | \n",
+ " | F10 = '\\ue03a'\n",
+ " | \n",
+ " | F11 = '\\ue03b'\n",
+ " | \n",
+ " | F12 = '\\ue03c'\n",
+ " | \n",
+ " | F2 = '\\ue032'\n",
+ " | \n",
+ " | F3 = '\\ue033'\n",
+ " | \n",
+ " | F4 = '\\ue034'\n",
+ " | \n",
+ " | F5 = '\\ue035'\n",
+ " | \n",
+ " | F6 = '\\ue036'\n",
+ " | \n",
+ " | F7 = '\\ue037'\n",
+ " | \n",
+ " | F8 = '\\ue038'\n",
+ " | \n",
+ " | F9 = '\\ue039'\n",
+ " | \n",
+ " | HELP = '\\ue002'\n",
+ " | \n",
+ " | HOME = '\\ue011'\n",
+ " | \n",
+ " | INSERT = '\\ue016'\n",
+ " | \n",
+ " | LEFT = '\\ue012'\n",
+ " | \n",
+ " | LEFT_ALT = '\\ue00a'\n",
+ " | \n",
+ " | LEFT_CONTROL = '\\ue009'\n",
+ " | \n",
+ " | LEFT_SHIFT = '\\ue008'\n",
+ " | \n",
+ " | META = '\\ue03d'\n",
+ " | \n",
+ " | MULTIPLY = '\\ue024'\n",
+ " | \n",
+ " | NULL = '\\ue000'\n",
+ " | \n",
+ " | NUMPAD0 = '\\ue01a'\n",
+ " | \n",
+ " | NUMPAD1 = '\\ue01b'\n",
+ " | \n",
+ " | NUMPAD2 = '\\ue01c'\n",
+ " | \n",
+ " | NUMPAD3 = '\\ue01d'\n",
+ " | \n",
+ " | NUMPAD4 = '\\ue01e'\n",
+ " | \n",
+ " | NUMPAD5 = '\\ue01f'\n",
+ " | \n",
+ " | NUMPAD6 = '\\ue020'\n",
+ " | \n",
+ " | NUMPAD7 = '\\ue021'\n",
+ " | \n",
+ " | NUMPAD8 = '\\ue022'\n",
+ " | \n",
+ " | NUMPAD9 = '\\ue023'\n",
+ " | \n",
+ " | PAGE_DOWN = '\\ue00f'\n",
+ " | \n",
+ " | PAGE_UP = '\\ue00e'\n",
+ " | \n",
+ " | PAUSE = '\\ue00b'\n",
+ " | \n",
+ " | RETURN = '\\ue006'\n",
+ " | \n",
+ " | RIGHT = '\\ue014'\n",
+ " | \n",
+ " | SEMICOLON = '\\ue018'\n",
+ " | \n",
+ " | SEPARATOR = '\\ue026'\n",
+ " | \n",
+ " | SHIFT = '\\ue008'\n",
+ " | \n",
+ " | SPACE = '\\ue00d'\n",
+ " | \n",
+ " | SUBTRACT = '\\ue027'\n",
+ " | \n",
+ " | TAB = '\\ue004'\n",
+ " | \n",
+ " | UP = '\\ue013'\n",
+ " | \n",
+ " | ZENKAKU_HANKAKU = '\\ue040'\n",
+ " \n",
+ " class Proxy(builtins.object)\n",
+ " | Proxy(raw=None)\n",
+ " | \n",
+ " | Proxy contains information about proxy type and necessary proxy\n",
+ " | settings.\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, raw=None)\n",
+ " | Creates a new Proxy.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - raw: raw proxy data. If None, default class values are used.\n",
+ " | \n",
+ " | to_capabilities(self)\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | auto_detect\n",
+ " | \n",
+ " | ftp_proxy\n",
+ " | \n",
+ " | http_proxy\n",
+ " | \n",
+ " | no_proxy\n",
+ " | \n",
+ " | proxy_autoconfig_url\n",
+ " | \n",
+ " | proxy_type\n",
+ " | Returns proxy type as `ProxyType`.\n",
+ " | \n",
+ " | socks_password\n",
+ " | \n",
+ " | socks_proxy\n",
+ " | \n",
+ " | socks_username\n",
+ " | \n",
+ " | socks_version\n",
+ " | \n",
+ " | ssl_proxy\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | autodetect = False\n",
+ " | \n",
+ " | ftpProxy = ''\n",
+ " | \n",
+ " | httpProxy = ''\n",
+ " | \n",
+ " | noProxy = ''\n",
+ " | \n",
+ " | proxyAutoconfigUrl = ''\n",
+ " | \n",
+ " | proxyType = {'ff_value': 6, 'string': 'UNSPECIFIED'}\n",
+ " | \n",
+ " | socksPassword = ''\n",
+ " | \n",
+ " | socksProxy = ''\n",
+ " | \n",
+ " | socksUsername = ''\n",
+ " | \n",
+ " | socksVersion = None\n",
+ " | \n",
+ " | sslProxy = ''\n",
+ " \n",
+ " Remote = class WebDriver(BaseWebDriver)\n",
+ " | Remote(command_executor='http://127.0.0.1:4444', keep_alive=True, file_detector=None, options: Union[selenium.webdriver.common.options.BaseOptions, List[selenium.webdriver.common.options.BaseOptions]] = None) -> None\n",
+ " | \n",
+ " | Controls a browser by sending commands to a remote server. This server\n",
+ " | is expected to be running the WebDriver wire protocol as defined at\n",
+ " | https://www.selenium.dev/documentation/legacy/json_wire_protocol/.\n",
+ " | \n",
+ " | :Attributes:\n",
+ " | - session_id - String ID of the browser session started and controlled by this WebDriver.\n",
+ " | - capabilities - Dictionary of effective capabilities of this browser session as returned\n",
+ " | by the remote server. See https://www.selenium.dev/documentation/legacy/desired_capabilities/\n",
+ " | - command_executor - remote_connection.RemoteConnection object used to execute commands.\n",
+ " | - error_handler - errorhandler.ErrorHandler object used to handle errors.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | WebDriver\n",
+ " | BaseWebDriver\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __enter__(self)\n",
+ " | \n",
+ " | __exit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], traceback: Optional[traceback])\n",
+ " | \n",
+ " | __init__(self, command_executor='http://127.0.0.1:4444', keep_alive=True, file_detector=None, options: Union[selenium.webdriver.common.options.BaseOptions, List[selenium.webdriver.common.options.BaseOptions]] = None) -> None\n",
+ " | Create a new driver that will issue commands using the wire\n",
+ " | protocol.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - command_executor - Either a string representing URL of the remote server or a custom\n",
+ " | remote_connection.RemoteConnection object. Defaults to 'http://127.0.0.1:4444/wd/hub'.\n",
+ " | - keep_alive - Whether to configure remote_connection.RemoteConnection to use\n",
+ " | HTTP keep-alive. Defaults to True.\n",
+ " | - file_detector - Pass custom file detector object during instantiation. If None,\n",
+ " | then default LocalFileDetector() will be used.\n",
+ " | - options - instance of a driver options.Options class\n",
+ " | \n",
+ " | __repr__(self)\n",
+ " | Return repr(self).\n",
+ " | \n",
+ " | add_cookie(self, cookie_dict) -> None\n",
+ " | Adds a cookie to your current session.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cookie_dict: A dictionary object, with required keys - \"name\" and \"value\";\n",
+ " | optional keys - \"path\", \"domain\", \"secure\", \"httpOnly\", \"expiry\", \"sameSite\"\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure' : True})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'sameSite' : 'Strict'})\n",
+ " | \n",
+ " | add_credential(self, credential: selenium.webdriver.common.virtual_authenticator.Credential) -> None\n",
+ " | Injects a credential into the authenticator.\n",
+ " | \n",
+ " | add_virtual_authenticator(self, options: selenium.webdriver.common.virtual_authenticator.VirtualAuthenticatorOptions) -> None\n",
+ " | Adds a virtual authenticator with the given options.\n",
+ " | \n",
+ " | back(self) -> None\n",
+ " | Goes one step backward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.back()\n",
+ " | \n",
+ " | bidi_connection(self)\n",
+ " | \n",
+ " | close(self) -> None\n",
+ " | Closes the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.close()\n",
+ " | \n",
+ " | create_web_element(self, element_id: str) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Creates a web element with the specified `element_id`.\n",
+ " | \n",
+ " | delete_all_cookies(self) -> None\n",
+ " | Delete all cookies in the scope of the session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_all_cookies()\n",
+ " | \n",
+ " | delete_cookie(self, name) -> None\n",
+ " | Deletes a single cookie with the given name.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_cookie('my_cookie')\n",
+ " | \n",
+ " | delete_downloadable_files(self) -> None\n",
+ " | Deletes all downloadable files.\n",
+ " | \n",
+ " | download_file(self, file_name: str, target_directory: str) -> None\n",
+ " | Downloads a file with the specified file name to the target\n",
+ " | directory.\n",
+ " | \n",
+ " | file_name: The name of the file to download.\n",
+ " | target_directory: The path to the directory to save the downloaded file.\n",
+ " | \n",
+ " | execute(self, driver_command: str, params: dict = None) -> dict\n",
+ " | Sends a command to be executed by a command.CommandExecutor.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver_command: The name of the command to execute as a string.\n",
+ " | - params: A dictionary of named parameters to send with the command.\n",
+ " | \n",
+ " | :Returns:\n",
+ " | The command's JSON response loaded into a dictionary object.\n",
+ " | \n",
+ " | execute_async_script(self, script: str, *args)\n",
+ " | Asynchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | script = \"var callback = arguments[arguments.length - 1]; \" \\\n",
+ " | \"window.setTimeout(function(){ callback('timeout') }, 3000);\"\n",
+ " | driver.execute_async_script(script)\n",
+ " | \n",
+ " | execute_script(self, script, *args)\n",
+ " | Synchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_script('return document.title;')\n",
+ " | \n",
+ " | file_detector_context(self, file_detector_class, *args, **kwargs)\n",
+ " | Overrides the current file detector (if necessary) in limited\n",
+ " | context. Ensures the original file detector is set afterwards.\n",
+ " | \n",
+ " | Example::\n",
+ " | \n",
+ " | with webdriver.file_detector_context(UselessFileDetector):\n",
+ " | someinput.send_keys('/etc/hosts')\n",
+ " | \n",
+ " | :Args:\n",
+ " | - file_detector_class - Class of the desired file detector. If the class is different\n",
+ " | from the current file_detector, then the class is instantiated with args and kwargs\n",
+ " | and used as a file detector during the duration of the context manager.\n",
+ " | - args - Optional arguments that get passed to the file detector class during\n",
+ " | instantiation.\n",
+ " | - kwargs - Keyword arguments, passed the same way as args.\n",
+ " | \n",
+ " | find_element(self, by='id', value: Optional[str] = None) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Find an element given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.find_element(By.ID, 'foo')\n",
+ " | \n",
+ " | :rtype: WebElement\n",
+ " | \n",
+ " | find_elements(self, by='id', value: Optional[str] = None) -> List[selenium.webdriver.remote.webelement.WebElement]\n",
+ " | Find elements given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | elements = driver.find_elements(By.CLASS_NAME, 'foo')\n",
+ " | \n",
+ " | :rtype: list of WebElement\n",
+ " | \n",
+ " | forward(self) -> None\n",
+ " | Goes one step forward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.forward()\n",
+ " | \n",
+ " | fullscreen_window(self) -> None\n",
+ " | Invokes the window manager-specific 'full screen' operation.\n",
+ " | \n",
+ " | get(self, url: str) -> None\n",
+ " | Loads a web page in the current browser session.\n",
+ " | \n",
+ " | get_cookie(self, name) -> Optional[Dict]\n",
+ " | Get a single cookie by name. Returns the cookie if found, None if\n",
+ " | not.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookie('my_cookie')\n",
+ " | \n",
+ " | get_cookies(self) -> List[dict]\n",
+ " | Returns a set of dictionaries, corresponding to cookies visible in\n",
+ " | the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookies()\n",
+ " | \n",
+ " | get_credentials(self) -> List[selenium.webdriver.common.virtual_authenticator.Credential]\n",
+ " | Returns the list of credentials owned by the authenticator.\n",
+ " | \n",
+ " | get_downloadable_files(self) -> dict\n",
+ " | Retrieves the downloadable files as a map of file names and their\n",
+ " | corresponding URLs.\n",
+ " | \n",
+ " | get_log(self, log_type)\n",
+ " | Gets the log for a given log type.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - log_type: type of log that which will be returned\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_log('browser')\n",
+ " | driver.get_log('driver')\n",
+ " | driver.get_log('client')\n",
+ " | driver.get_log('server')\n",
+ " | \n",
+ " | get_pinned_scripts(self) -> List[str]\n",
+ " | \n",
+ " | get_screenshot_as_base64(self) -> str\n",
+ " | Gets the screenshot of the current window as a base64 encoded string\n",
+ " | which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_base64()\n",
+ " | \n",
+ " | get_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_screenshot_as_png(self) -> bytes\n",
+ " | Gets the screenshot of the current window as a binary data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_png()\n",
+ " | \n",
+ " | get_window_position(self, windowHandle='current') -> dict\n",
+ " | Gets the x,y position of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_position()\n",
+ " | \n",
+ " | get_window_rect(self) -> dict\n",
+ " | Gets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_rect()\n",
+ " | \n",
+ " | get_window_size(self, windowHandle: str = 'current') -> dict\n",
+ " | Gets the width and height of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_size()\n",
+ " | \n",
+ " | implicitly_wait(self, time_to_wait: float) -> None\n",
+ " | Sets a sticky timeout to implicitly wait for an element to be found,\n",
+ " | or a command to complete. This method only needs to be called one time\n",
+ " | per session. To set the timeout for calls to execute_async_script, see\n",
+ " | set_script_timeout.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: Amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.implicitly_wait(30)\n",
+ " | \n",
+ " | maximize_window(self) -> None\n",
+ " | Maximizes the current window that webdriver is using.\n",
+ " | \n",
+ " | minimize_window(self) -> None\n",
+ " | Invokes the window manager-specific 'minimize' operation.\n",
+ " | \n",
+ " | pin_script(self, script: str, script_key=None) -> selenium.webdriver.remote.script_key.ScriptKey\n",
+ " | Store common javascript scripts to be executed later by a unique\n",
+ " | hashable ID.\n",
+ " | \n",
+ " | print_page(self, print_options: Optional[selenium.webdriver.common.print_page_options.PrintOptions] = None) -> str\n",
+ " | Takes PDF of the current page.\n",
+ " | \n",
+ " | The driver makes a best effort to return a PDF based on the\n",
+ " | provided parameters.\n",
+ " | \n",
+ " | quit(self) -> None\n",
+ " | Quits the driver and closes every associated window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.quit()\n",
+ " | \n",
+ " | refresh(self) -> None\n",
+ " | Refreshes the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.refresh()\n",
+ " | \n",
+ " | remove_all_credentials(self) -> None\n",
+ " | Removes all credentials from the authenticator.\n",
+ " | \n",
+ " | remove_credential(self, credential_id: Union[str, bytearray]) -> None\n",
+ " | Removes a credential from the authenticator.\n",
+ " | \n",
+ " | remove_virtual_authenticator(self) -> None\n",
+ " | Removes a previously added virtual authenticator.\n",
+ " | \n",
+ " | The authenticator is no longer valid after removal, so no\n",
+ " | methods may be called.\n",
+ " | \n",
+ " | save_screenshot(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_page_load_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time to wait for a page load to complete before\n",
+ " | throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_page_load_timeout(30)\n",
+ " | \n",
+ " | set_script_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time that the script should wait during an\n",
+ " | execute_async_script call before throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_script_timeout(30)\n",
+ " | \n",
+ " | set_user_verified(self, verified: bool) -> None\n",
+ " | Sets whether the authenticator will simulate success or fail on user\n",
+ " | verification.\n",
+ " | \n",
+ " | verified: True if the authenticator will pass user verification, False otherwise.\n",
+ " | \n",
+ " | set_window_position(self, x, y, windowHandle: str = 'current') -> dict\n",
+ " | Sets the x,y position of the current window. (window.moveTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - x: the x-coordinate in pixels to set the window position\n",
+ " | - y: the y-coordinate in pixels to set the window position\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_position(0,0)\n",
+ " | \n",
+ " | set_window_rect(self, x=None, y=None, width=None, height=None) -> dict\n",
+ " | Sets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window. This method is only supported for W3C compatible\n",
+ " | browsers; other browsers should use `set_window_position` and\n",
+ " | `set_window_size`.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_rect(x=10, y=10)\n",
+ " | driver.set_window_rect(width=100, height=200)\n",
+ " | driver.set_window_rect(x=10, y=10, width=100, height=200)\n",
+ " | \n",
+ " | set_window_size(self, width, height, windowHandle: str = 'current') -> None\n",
+ " | Sets the width and height of the current window. (window.resizeTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - width: the width in pixels to set the window to\n",
+ " | - height: the height in pixels to set the window to\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_size(800,600)\n",
+ " | \n",
+ " | start_client(self)\n",
+ " | Called before starting a new session.\n",
+ " | \n",
+ " | This method may be overridden to define custom startup behavior.\n",
+ " | \n",
+ " | start_session(self, capabilities: dict) -> None\n",
+ " | Creates a new session with the desired capabilities.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - capabilities - a capabilities dict to start the session with.\n",
+ " | \n",
+ " | stop_client(self)\n",
+ " | Called after executing a quit command.\n",
+ " | \n",
+ " | This method may be overridden to define custom shutdown\n",
+ " | behavior.\n",
+ " | \n",
+ " | unpin(self, script_key: selenium.webdriver.remote.script_key.ScriptKey) -> None\n",
+ " | Remove a pinned script from storage.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties defined here:\n",
+ " | \n",
+ " | application_cache\n",
+ " | Returns a ApplicationCache Object to interact with the browser app\n",
+ " | cache.\n",
+ " | \n",
+ " | capabilities\n",
+ " | Returns the drivers current capabilities being used.\n",
+ " | \n",
+ " | current_url\n",
+ " | Gets the URL of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_url\n",
+ " | \n",
+ " | current_window_handle\n",
+ " | Returns the handle of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_window_handle\n",
+ " | \n",
+ " | desired_capabilities\n",
+ " | Returns the drivers current desired capabilities being used.\n",
+ " | \n",
+ " | log_types\n",
+ " | Gets a list of the available log types. This only works with w3c\n",
+ " | compliant browsers.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.log_types\n",
+ " | \n",
+ " | mobile\n",
+ " | \n",
+ " | name\n",
+ " | Returns the name of the underlying browser for this instance.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | name = driver.name\n",
+ " | \n",
+ " | page_source\n",
+ " | Gets the source of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.page_source\n",
+ " | \n",
+ " | switch_to\n",
+ " | :Returns:\n",
+ " | - SwitchTo: an object containing all options to switch focus into\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.switch_to.active_element\n",
+ " | alert = driver.switch_to.alert\n",
+ " | driver.switch_to.default_content()\n",
+ " | driver.switch_to.frame('frame_name')\n",
+ " | driver.switch_to.frame(1)\n",
+ " | driver.switch_to.frame(driver.find_elements(By.TAG_NAME, \"iframe\")[0])\n",
+ " | driver.switch_to.parent_frame()\n",
+ " | driver.switch_to.window('main')\n",
+ " | \n",
+ " | title\n",
+ " | Returns the title of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | title = driver.title\n",
+ " | \n",
+ " | virtual_authenticator_id\n",
+ " | Returns the id of the virtual authenticator.\n",
+ " | \n",
+ " | window_handles\n",
+ " | Returns the handles of all windows within the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.window_handles\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | file_detector\n",
+ " | \n",
+ " | orientation\n",
+ " | Gets the current orientation of the device.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | orientation = driver.orientation\n",
+ " | \n",
+ " | timeouts\n",
+ " | Get all the timeouts that have been set on the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.timeouts\n",
+ " | :rtype: Timeout\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from BaseWebDriver:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " Safari = class WebDriver(selenium.webdriver.remote.webdriver.WebDriver)\n",
+ " | Safari(reuse_service=False, keep_alive=True, options: selenium.webdriver.safari.options.Options = None, service: selenium.webdriver.safari.service.Service = None) -> None\n",
+ " | \n",
+ " | Controls the SafariDriver and allows you to drive the browser.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.BaseWebDriver\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, reuse_service=False, keep_alive=True, options: selenium.webdriver.safari.options.Options = None, service: selenium.webdriver.safari.service.Service = None) -> None\n",
+ " | Creates a new Safari driver instance and launches or finds a running\n",
+ " | safaridriver service.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - reuse_service - If True, do not spawn a safaridriver instance; instead, connect to an already-running service that was launched externally.\n",
+ " | - keep_alive - Whether to configure SafariRemoteConnection to use\n",
+ " | HTTP keep-alive. Defaults to True.\n",
+ " | - options - Instance of ``options.Options``.\n",
+ " | - service - Service object for handling the browser driver if you need to pass extra details\n",
+ " | \n",
+ " | debug(self)\n",
+ " | # First available in Safari 11.1 and Safari Technology Preview 42.\n",
+ " | \n",
+ " | get_permission(self, permission)\n",
+ " | # First available in Safari 11.1 and Safari Technology Preview 41.\n",
+ " | \n",
+ " | quit(self)\n",
+ " | Closes the browser and shuts down the SafariDriver executable that\n",
+ " | is started when starting the SafariDriver.\n",
+ " | \n",
+ " | set_permission(self, permission, value)\n",
+ " | # First available in Safari 11.1 and Safari Technology Preview 41.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | __enter__(self)\n",
+ " | \n",
+ " | __exit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], traceback: Optional[traceback])\n",
+ " | \n",
+ " | __repr__(self)\n",
+ " | Return repr(self).\n",
+ " | \n",
+ " | add_cookie(self, cookie_dict) -> None\n",
+ " | Adds a cookie to your current session.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cookie_dict: A dictionary object, with required keys - \"name\" and \"value\";\n",
+ " | optional keys - \"path\", \"domain\", \"secure\", \"httpOnly\", \"expiry\", \"sameSite\"\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure' : True})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'sameSite' : 'Strict'})\n",
+ " | \n",
+ " | add_credential(self, credential: selenium.webdriver.common.virtual_authenticator.Credential) -> None\n",
+ " | Injects a credential into the authenticator.\n",
+ " | \n",
+ " | add_virtual_authenticator(self, options: selenium.webdriver.common.virtual_authenticator.VirtualAuthenticatorOptions) -> None\n",
+ " | Adds a virtual authenticator with the given options.\n",
+ " | \n",
+ " | back(self) -> None\n",
+ " | Goes one step backward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.back()\n",
+ " | \n",
+ " | bidi_connection(self)\n",
+ " | \n",
+ " | close(self) -> None\n",
+ " | Closes the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.close()\n",
+ " | \n",
+ " | create_web_element(self, element_id: str) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Creates a web element with the specified `element_id`.\n",
+ " | \n",
+ " | delete_all_cookies(self) -> None\n",
+ " | Delete all cookies in the scope of the session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_all_cookies()\n",
+ " | \n",
+ " | delete_cookie(self, name) -> None\n",
+ " | Deletes a single cookie with the given name.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_cookie('my_cookie')\n",
+ " | \n",
+ " | delete_downloadable_files(self) -> None\n",
+ " | Deletes all downloadable files.\n",
+ " | \n",
+ " | download_file(self, file_name: str, target_directory: str) -> None\n",
+ " | Downloads a file with the specified file name to the target\n",
+ " | directory.\n",
+ " | \n",
+ " | file_name: The name of the file to download.\n",
+ " | target_directory: The path to the directory to save the downloaded file.\n",
+ " | \n",
+ " | execute(self, driver_command: str, params: dict = None) -> dict\n",
+ " | Sends a command to be executed by a command.CommandExecutor.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver_command: The name of the command to execute as a string.\n",
+ " | - params: A dictionary of named parameters to send with the command.\n",
+ " | \n",
+ " | :Returns:\n",
+ " | The command's JSON response loaded into a dictionary object.\n",
+ " | \n",
+ " | execute_async_script(self, script: str, *args)\n",
+ " | Asynchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | script = \"var callback = arguments[arguments.length - 1]; \" \\\n",
+ " | \"window.setTimeout(function(){ callback('timeout') }, 3000);\"\n",
+ " | driver.execute_async_script(script)\n",
+ " | \n",
+ " | execute_script(self, script, *args)\n",
+ " | Synchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_script('return document.title;')\n",
+ " | \n",
+ " | file_detector_context(self, file_detector_class, *args, **kwargs)\n",
+ " | Overrides the current file detector (if necessary) in limited\n",
+ " | context. Ensures the original file detector is set afterwards.\n",
+ " | \n",
+ " | Example::\n",
+ " | \n",
+ " | with webdriver.file_detector_context(UselessFileDetector):\n",
+ " | someinput.send_keys('/etc/hosts')\n",
+ " | \n",
+ " | :Args:\n",
+ " | - file_detector_class - Class of the desired file detector. If the class is different\n",
+ " | from the current file_detector, then the class is instantiated with args and kwargs\n",
+ " | and used as a file detector during the duration of the context manager.\n",
+ " | - args - Optional arguments that get passed to the file detector class during\n",
+ " | instantiation.\n",
+ " | - kwargs - Keyword arguments, passed the same way as args.\n",
+ " | \n",
+ " | find_element(self, by='id', value: Optional[str] = None) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Find an element given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.find_element(By.ID, 'foo')\n",
+ " | \n",
+ " | :rtype: WebElement\n",
+ " | \n",
+ " | find_elements(self, by='id', value: Optional[str] = None) -> List[selenium.webdriver.remote.webelement.WebElement]\n",
+ " | Find elements given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | elements = driver.find_elements(By.CLASS_NAME, 'foo')\n",
+ " | \n",
+ " | :rtype: list of WebElement\n",
+ " | \n",
+ " | forward(self) -> None\n",
+ " | Goes one step forward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.forward()\n",
+ " | \n",
+ " | fullscreen_window(self) -> None\n",
+ " | Invokes the window manager-specific 'full screen' operation.\n",
+ " | \n",
+ " | get(self, url: str) -> None\n",
+ " | Loads a web page in the current browser session.\n",
+ " | \n",
+ " | get_cookie(self, name) -> Optional[Dict]\n",
+ " | Get a single cookie by name. Returns the cookie if found, None if\n",
+ " | not.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookie('my_cookie')\n",
+ " | \n",
+ " | get_cookies(self) -> List[dict]\n",
+ " | Returns a set of dictionaries, corresponding to cookies visible in\n",
+ " | the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookies()\n",
+ " | \n",
+ " | get_credentials(self) -> List[selenium.webdriver.common.virtual_authenticator.Credential]\n",
+ " | Returns the list of credentials owned by the authenticator.\n",
+ " | \n",
+ " | get_downloadable_files(self) -> dict\n",
+ " | Retrieves the downloadable files as a map of file names and their\n",
+ " | corresponding URLs.\n",
+ " | \n",
+ " | get_log(self, log_type)\n",
+ " | Gets the log for a given log type.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - log_type: type of log that which will be returned\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_log('browser')\n",
+ " | driver.get_log('driver')\n",
+ " | driver.get_log('client')\n",
+ " | driver.get_log('server')\n",
+ " | \n",
+ " | get_pinned_scripts(self) -> List[str]\n",
+ " | \n",
+ " | get_screenshot_as_base64(self) -> str\n",
+ " | Gets the screenshot of the current window as a base64 encoded string\n",
+ " | which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_base64()\n",
+ " | \n",
+ " | get_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_screenshot_as_png(self) -> bytes\n",
+ " | Gets the screenshot of the current window as a binary data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_png()\n",
+ " | \n",
+ " | get_window_position(self, windowHandle='current') -> dict\n",
+ " | Gets the x,y position of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_position()\n",
+ " | \n",
+ " | get_window_rect(self) -> dict\n",
+ " | Gets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_rect()\n",
+ " | \n",
+ " | get_window_size(self, windowHandle: str = 'current') -> dict\n",
+ " | Gets the width and height of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_size()\n",
+ " | \n",
+ " | implicitly_wait(self, time_to_wait: float) -> None\n",
+ " | Sets a sticky timeout to implicitly wait for an element to be found,\n",
+ " | or a command to complete. This method only needs to be called one time\n",
+ " | per session. To set the timeout for calls to execute_async_script, see\n",
+ " | set_script_timeout.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: Amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.implicitly_wait(30)\n",
+ " | \n",
+ " | maximize_window(self) -> None\n",
+ " | Maximizes the current window that webdriver is using.\n",
+ " | \n",
+ " | minimize_window(self) -> None\n",
+ " | Invokes the window manager-specific 'minimize' operation.\n",
+ " | \n",
+ " | pin_script(self, script: str, script_key=None) -> selenium.webdriver.remote.script_key.ScriptKey\n",
+ " | Store common javascript scripts to be executed later by a unique\n",
+ " | hashable ID.\n",
+ " | \n",
+ " | print_page(self, print_options: Optional[selenium.webdriver.common.print_page_options.PrintOptions] = None) -> str\n",
+ " | Takes PDF of the current page.\n",
+ " | \n",
+ " | The driver makes a best effort to return a PDF based on the\n",
+ " | provided parameters.\n",
+ " | \n",
+ " | refresh(self) -> None\n",
+ " | Refreshes the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.refresh()\n",
+ " | \n",
+ " | remove_all_credentials(self) -> None\n",
+ " | Removes all credentials from the authenticator.\n",
+ " | \n",
+ " | remove_credential(self, credential_id: Union[str, bytearray]) -> None\n",
+ " | Removes a credential from the authenticator.\n",
+ " | \n",
+ " | remove_virtual_authenticator(self) -> None\n",
+ " | Removes a previously added virtual authenticator.\n",
+ " | \n",
+ " | The authenticator is no longer valid after removal, so no\n",
+ " | methods may be called.\n",
+ " | \n",
+ " | save_screenshot(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_page_load_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time to wait for a page load to complete before\n",
+ " | throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_page_load_timeout(30)\n",
+ " | \n",
+ " | set_script_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time that the script should wait during an\n",
+ " | execute_async_script call before throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_script_timeout(30)\n",
+ " | \n",
+ " | set_user_verified(self, verified: bool) -> None\n",
+ " | Sets whether the authenticator will simulate success or fail on user\n",
+ " | verification.\n",
+ " | \n",
+ " | verified: True if the authenticator will pass user verification, False otherwise.\n",
+ " | \n",
+ " | set_window_position(self, x, y, windowHandle: str = 'current') -> dict\n",
+ " | Sets the x,y position of the current window. (window.moveTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - x: the x-coordinate in pixels to set the window position\n",
+ " | - y: the y-coordinate in pixels to set the window position\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_position(0,0)\n",
+ " | \n",
+ " | set_window_rect(self, x=None, y=None, width=None, height=None) -> dict\n",
+ " | Sets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window. This method is only supported for W3C compatible\n",
+ " | browsers; other browsers should use `set_window_position` and\n",
+ " | `set_window_size`.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_rect(x=10, y=10)\n",
+ " | driver.set_window_rect(width=100, height=200)\n",
+ " | driver.set_window_rect(x=10, y=10, width=100, height=200)\n",
+ " | \n",
+ " | set_window_size(self, width, height, windowHandle: str = 'current') -> None\n",
+ " | Sets the width and height of the current window. (window.resizeTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - width: the width in pixels to set the window to\n",
+ " | - height: the height in pixels to set the window to\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_size(800,600)\n",
+ " | \n",
+ " | start_client(self)\n",
+ " | Called before starting a new session.\n",
+ " | \n",
+ " | This method may be overridden to define custom startup behavior.\n",
+ " | \n",
+ " | start_session(self, capabilities: dict) -> None\n",
+ " | Creates a new session with the desired capabilities.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - capabilities - a capabilities dict to start the session with.\n",
+ " | \n",
+ " | stop_client(self)\n",
+ " | Called after executing a quit command.\n",
+ " | \n",
+ " | This method may be overridden to define custom shutdown\n",
+ " | behavior.\n",
+ " | \n",
+ " | unpin(self, script_key: selenium.webdriver.remote.script_key.ScriptKey) -> None\n",
+ " | Remove a pinned script from storage.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | application_cache\n",
+ " | Returns a ApplicationCache Object to interact with the browser app\n",
+ " | cache.\n",
+ " | \n",
+ " | capabilities\n",
+ " | Returns the drivers current capabilities being used.\n",
+ " | \n",
+ " | current_url\n",
+ " | Gets the URL of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_url\n",
+ " | \n",
+ " | current_window_handle\n",
+ " | Returns the handle of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_window_handle\n",
+ " | \n",
+ " | desired_capabilities\n",
+ " | Returns the drivers current desired capabilities being used.\n",
+ " | \n",
+ " | log_types\n",
+ " | Gets a list of the available log types. This only works with w3c\n",
+ " | compliant browsers.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.log_types\n",
+ " | \n",
+ " | mobile\n",
+ " | \n",
+ " | name\n",
+ " | Returns the name of the underlying browser for this instance.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | name = driver.name\n",
+ " | \n",
+ " | page_source\n",
+ " | Gets the source of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.page_source\n",
+ " | \n",
+ " | switch_to\n",
+ " | :Returns:\n",
+ " | - SwitchTo: an object containing all options to switch focus into\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.switch_to.active_element\n",
+ " | alert = driver.switch_to.alert\n",
+ " | driver.switch_to.default_content()\n",
+ " | driver.switch_to.frame('frame_name')\n",
+ " | driver.switch_to.frame(1)\n",
+ " | driver.switch_to.frame(driver.find_elements(By.TAG_NAME, \"iframe\")[0])\n",
+ " | driver.switch_to.parent_frame()\n",
+ " | driver.switch_to.window('main')\n",
+ " | \n",
+ " | title\n",
+ " | Returns the title of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | title = driver.title\n",
+ " | \n",
+ " | virtual_authenticator_id\n",
+ " | Returns the id of the virtual authenticator.\n",
+ " | \n",
+ " | window_handles\n",
+ " | Returns the handles of all windows within the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.window_handles\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | file_detector\n",
+ " | \n",
+ " | orientation\n",
+ " | Gets the current orientation of the device.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | orientation = driver.orientation\n",
+ " | \n",
+ " | timeouts\n",
+ " | Get all the timeouts that have been set on the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.timeouts\n",
+ " | :rtype: Timeout\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.BaseWebDriver:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " SafariOptions = class Options(selenium.webdriver.common.options.ArgOptions)\n",
+ " | SafariOptions() -> None\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Options\n",
+ " | selenium.webdriver.common.options.ArgOptions\n",
+ " | selenium.webdriver.common.options.BaseOptions\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Readonly properties defined here:\n",
+ " | \n",
+ " | default_capabilities\n",
+ " | Return minimal capabilities necessary as a dictionary.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | automatic_inspection\n",
+ " | \n",
+ " | automatic_profiling\n",
+ " | \n",
+ " | use_technology_preview\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | AUTOMATIC_INSPECTION = 'safari:automaticInspection'\n",
+ " | \n",
+ " | AUTOMATIC_PROFILING = 'safari:automaticProfiling'\n",
+ " | \n",
+ " | SAFARI_TECH_PREVIEW = 'Safari Technology Preview'\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | __init__(self) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | add_argument(self, argument)\n",
+ " | Adds an argument to the list.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - Sets the arguments\n",
+ " | \n",
+ " | ignore_local_proxy_environment_variables(self) -> None\n",
+ " | By calling this you will ignore HTTP_PROXY and HTTPS_PROXY from\n",
+ " | being picked up and used.\n",
+ " | \n",
+ " | to_capabilities(self)\n",
+ " | Convert options into capabilities dictionary.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | arguments\n",
+ " | :Returns: A list of arguments needed for the browser.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | BINARY_LOCATION_ERROR = 'Binary Location Must be a String'\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | enable_mobile(self, android_package: Optional[str] = None, android_activity: Optional[str] = None, device_serial: Optional[str] = None) -> None\n",
+ " | Enables mobile browser use for browsers that support it.\n",
+ " | \n",
+ " | :Args:\n",
+ " | android_activity: The name of the android package to start\n",
+ " | \n",
+ " | set_capability(self, name, value) -> None\n",
+ " | Sets a capability.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | capabilities\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | accept_insecure_certs\n",
+ " | \n",
+ " | browser_version\n",
+ " | \n",
+ " | enable_downloads\n",
+ " | \n",
+ " | page_load_strategy\n",
+ " | \n",
+ " | platform_name\n",
+ " | \n",
+ " | proxy\n",
+ " | \n",
+ " | set_window_rect\n",
+ " | \n",
+ " | strict_file_interactability\n",
+ " | \n",
+ " | timeouts\n",
+ " | \n",
+ " | unhandled_prompt_behavior\n",
+ " \n",
+ " SafariService = class Service(selenium.webdriver.common.service.Service)\n",
+ " | SafariService(executable_path: str = None, port: int = 0, quiet: bool = None, service_args: Optional[List[str]] = None, env: Optional[Mapping[str, str]] = None, reuse_service=False, **kwargs) -> None\n",
+ " | \n",
+ " | A Service class that is responsible for the starting and stopping of\n",
+ " | `safaridriver` This is only supported on MAC OSX.\n",
+ " | \n",
+ " | :param executable_path: install path of the safaridriver executable, defaults to `/usr/bin/safaridriver`.\n",
+ " | :param port: Port for the service to run on, defaults to 0 where the operating system will decide.\n",
+ " | :param quiet: (Deprecated) Suppress driver stdout & stderr, redirects to os.devnull if enabled.\n",
+ " | :param service_args: (Optional) List of args to be passed to the subprocess when launching the executable.\n",
+ " | :param env: (Optional) Mapping of environment variables for the new process, defaults to `os.environ`.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Service\n",
+ " | selenium.webdriver.common.service.Service\n",
+ " | abc.ABC\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, executable_path: str = None, port: int = 0, quiet: bool = None, service_args: Optional[List[str]] = None, env: Optional[Mapping[str, str]] = None, reuse_service=False, **kwargs) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | command_line_args(self) -> List[str]\n",
+ " | A List of program arguments (excluding the executable).\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties defined here:\n",
+ " | \n",
+ " | service_url\n",
+ " | Gets the url of the SafariDriver Service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | reuse_service\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __del__(self) -> None\n",
+ " | \n",
+ " | assert_process_still_running(self) -> None\n",
+ " | Check if the underlying process is still running.\n",
+ " | \n",
+ " | is_connectable(self) -> bool\n",
+ " | Establishes a socket connection to determine if the service running\n",
+ " | on the port is accessible.\n",
+ " | \n",
+ " | send_remote_shutdown_command(self) -> None\n",
+ " | Dispatch an HTTP request to the shutdown endpoint for the service in\n",
+ " | an attempt to stop it.\n",
+ " | \n",
+ " | start(self) -> None\n",
+ " | Starts the Service.\n",
+ " | \n",
+ " | :Exceptions:\n",
+ " | - WebDriverException : Raised either when it can't start the service\n",
+ " | or when it can't connect to the service\n",
+ " | \n",
+ " | stop(self) -> None\n",
+ " | Stops the service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | path\n",
+ " \n",
+ " WPEWebKit = class WebDriver(selenium.webdriver.remote.webdriver.WebDriver)\n",
+ " | WPEWebKit(executable_path='WPEWebDriver', port=0, options=None, desired_capabilities={'browserName': 'MiniBrowser', 'version': '', 'platform': 'ANY'}, service_log_path=None)\n",
+ " | \n",
+ " | Controls the WPEWebKitDriver and allows you to drive the browser.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.BaseWebDriver\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, executable_path='WPEWebDriver', port=0, options=None, desired_capabilities={'browserName': 'MiniBrowser', 'version': '', 'platform': 'ANY'}, service_log_path=None)\n",
+ " | Creates a new instance of the WPEWebKit driver.\n",
+ " | \n",
+ " | Starts the service and then creates new instance of WPEWebKit Driver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - executable_path : path to the executable. If the default is used it assumes the executable is in the $PATH.\n",
+ " | - port : port you would like the service to run, if left as 0, a free port will be found.\n",
+ " | - options : an instance of WPEWebKitOptions\n",
+ " | - desired_capabilities : Dictionary object with desired capabilities\n",
+ " | - service_log_path : Path to write service stdout and stderr output.\n",
+ " | \n",
+ " | quit(self)\n",
+ " | Closes the browser and shuts down the WPEWebKitDriver executable\n",
+ " | that is started when starting the WPEWebKitDriver.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | __enter__(self)\n",
+ " | \n",
+ " | __exit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], traceback: Optional[traceback])\n",
+ " | \n",
+ " | __repr__(self)\n",
+ " | Return repr(self).\n",
+ " | \n",
+ " | add_cookie(self, cookie_dict) -> None\n",
+ " | Adds a cookie to your current session.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cookie_dict: A dictionary object, with required keys - \"name\" and \"value\";\n",
+ " | optional keys - \"path\", \"domain\", \"secure\", \"httpOnly\", \"expiry\", \"sameSite\"\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure' : True})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'sameSite' : 'Strict'})\n",
+ " | \n",
+ " | add_credential(self, credential: selenium.webdriver.common.virtual_authenticator.Credential) -> None\n",
+ " | Injects a credential into the authenticator.\n",
+ " | \n",
+ " | add_virtual_authenticator(self, options: selenium.webdriver.common.virtual_authenticator.VirtualAuthenticatorOptions) -> None\n",
+ " | Adds a virtual authenticator with the given options.\n",
+ " | \n",
+ " | back(self) -> None\n",
+ " | Goes one step backward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.back()\n",
+ " | \n",
+ " | bidi_connection(self)\n",
+ " | \n",
+ " | close(self) -> None\n",
+ " | Closes the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.close()\n",
+ " | \n",
+ " | create_web_element(self, element_id: str) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Creates a web element with the specified `element_id`.\n",
+ " | \n",
+ " | delete_all_cookies(self) -> None\n",
+ " | Delete all cookies in the scope of the session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_all_cookies()\n",
+ " | \n",
+ " | delete_cookie(self, name) -> None\n",
+ " | Deletes a single cookie with the given name.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_cookie('my_cookie')\n",
+ " | \n",
+ " | delete_downloadable_files(self) -> None\n",
+ " | Deletes all downloadable files.\n",
+ " | \n",
+ " | download_file(self, file_name: str, target_directory: str) -> None\n",
+ " | Downloads a file with the specified file name to the target\n",
+ " | directory.\n",
+ " | \n",
+ " | file_name: The name of the file to download.\n",
+ " | target_directory: The path to the directory to save the downloaded file.\n",
+ " | \n",
+ " | execute(self, driver_command: str, params: dict = None) -> dict\n",
+ " | Sends a command to be executed by a command.CommandExecutor.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver_command: The name of the command to execute as a string.\n",
+ " | - params: A dictionary of named parameters to send with the command.\n",
+ " | \n",
+ " | :Returns:\n",
+ " | The command's JSON response loaded into a dictionary object.\n",
+ " | \n",
+ " | execute_async_script(self, script: str, *args)\n",
+ " | Asynchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | script = \"var callback = arguments[arguments.length - 1]; \" \\\n",
+ " | \"window.setTimeout(function(){ callback('timeout') }, 3000);\"\n",
+ " | driver.execute_async_script(script)\n",
+ " | \n",
+ " | execute_script(self, script, *args)\n",
+ " | Synchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_script('return document.title;')\n",
+ " | \n",
+ " | file_detector_context(self, file_detector_class, *args, **kwargs)\n",
+ " | Overrides the current file detector (if necessary) in limited\n",
+ " | context. Ensures the original file detector is set afterwards.\n",
+ " | \n",
+ " | Example::\n",
+ " | \n",
+ " | with webdriver.file_detector_context(UselessFileDetector):\n",
+ " | someinput.send_keys('/etc/hosts')\n",
+ " | \n",
+ " | :Args:\n",
+ " | - file_detector_class - Class of the desired file detector. If the class is different\n",
+ " | from the current file_detector, then the class is instantiated with args and kwargs\n",
+ " | and used as a file detector during the duration of the context manager.\n",
+ " | - args - Optional arguments that get passed to the file detector class during\n",
+ " | instantiation.\n",
+ " | - kwargs - Keyword arguments, passed the same way as args.\n",
+ " | \n",
+ " | find_element(self, by='id', value: Optional[str] = None) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Find an element given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.find_element(By.ID, 'foo')\n",
+ " | \n",
+ " | :rtype: WebElement\n",
+ " | \n",
+ " | find_elements(self, by='id', value: Optional[str] = None) -> List[selenium.webdriver.remote.webelement.WebElement]\n",
+ " | Find elements given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | elements = driver.find_elements(By.CLASS_NAME, 'foo')\n",
+ " | \n",
+ " | :rtype: list of WebElement\n",
+ " | \n",
+ " | forward(self) -> None\n",
+ " | Goes one step forward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.forward()\n",
+ " | \n",
+ " | fullscreen_window(self) -> None\n",
+ " | Invokes the window manager-specific 'full screen' operation.\n",
+ " | \n",
+ " | get(self, url: str) -> None\n",
+ " | Loads a web page in the current browser session.\n",
+ " | \n",
+ " | get_cookie(self, name) -> Optional[Dict]\n",
+ " | Get a single cookie by name. Returns the cookie if found, None if\n",
+ " | not.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookie('my_cookie')\n",
+ " | \n",
+ " | get_cookies(self) -> List[dict]\n",
+ " | Returns a set of dictionaries, corresponding to cookies visible in\n",
+ " | the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookies()\n",
+ " | \n",
+ " | get_credentials(self) -> List[selenium.webdriver.common.virtual_authenticator.Credential]\n",
+ " | Returns the list of credentials owned by the authenticator.\n",
+ " | \n",
+ " | get_downloadable_files(self) -> dict\n",
+ " | Retrieves the downloadable files as a map of file names and their\n",
+ " | corresponding URLs.\n",
+ " | \n",
+ " | get_log(self, log_type)\n",
+ " | Gets the log for a given log type.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - log_type: type of log that which will be returned\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_log('browser')\n",
+ " | driver.get_log('driver')\n",
+ " | driver.get_log('client')\n",
+ " | driver.get_log('server')\n",
+ " | \n",
+ " | get_pinned_scripts(self) -> List[str]\n",
+ " | \n",
+ " | get_screenshot_as_base64(self) -> str\n",
+ " | Gets the screenshot of the current window as a base64 encoded string\n",
+ " | which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_base64()\n",
+ " | \n",
+ " | get_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_screenshot_as_png(self) -> bytes\n",
+ " | Gets the screenshot of the current window as a binary data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_png()\n",
+ " | \n",
+ " | get_window_position(self, windowHandle='current') -> dict\n",
+ " | Gets the x,y position of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_position()\n",
+ " | \n",
+ " | get_window_rect(self) -> dict\n",
+ " | Gets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_rect()\n",
+ " | \n",
+ " | get_window_size(self, windowHandle: str = 'current') -> dict\n",
+ " | Gets the width and height of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_size()\n",
+ " | \n",
+ " | implicitly_wait(self, time_to_wait: float) -> None\n",
+ " | Sets a sticky timeout to implicitly wait for an element to be found,\n",
+ " | or a command to complete. This method only needs to be called one time\n",
+ " | per session. To set the timeout for calls to execute_async_script, see\n",
+ " | set_script_timeout.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: Amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.implicitly_wait(30)\n",
+ " | \n",
+ " | maximize_window(self) -> None\n",
+ " | Maximizes the current window that webdriver is using.\n",
+ " | \n",
+ " | minimize_window(self) -> None\n",
+ " | Invokes the window manager-specific 'minimize' operation.\n",
+ " | \n",
+ " | pin_script(self, script: str, script_key=None) -> selenium.webdriver.remote.script_key.ScriptKey\n",
+ " | Store common javascript scripts to be executed later by a unique\n",
+ " | hashable ID.\n",
+ " | \n",
+ " | print_page(self, print_options: Optional[selenium.webdriver.common.print_page_options.PrintOptions] = None) -> str\n",
+ " | Takes PDF of the current page.\n",
+ " | \n",
+ " | The driver makes a best effort to return a PDF based on the\n",
+ " | provided parameters.\n",
+ " | \n",
+ " | refresh(self) -> None\n",
+ " | Refreshes the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.refresh()\n",
+ " | \n",
+ " | remove_all_credentials(self) -> None\n",
+ " | Removes all credentials from the authenticator.\n",
+ " | \n",
+ " | remove_credential(self, credential_id: Union[str, bytearray]) -> None\n",
+ " | Removes a credential from the authenticator.\n",
+ " | \n",
+ " | remove_virtual_authenticator(self) -> None\n",
+ " | Removes a previously added virtual authenticator.\n",
+ " | \n",
+ " | The authenticator is no longer valid after removal, so no\n",
+ " | methods may be called.\n",
+ " | \n",
+ " | save_screenshot(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_page_load_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time to wait for a page load to complete before\n",
+ " | throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_page_load_timeout(30)\n",
+ " | \n",
+ " | set_script_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time that the script should wait during an\n",
+ " | execute_async_script call before throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_script_timeout(30)\n",
+ " | \n",
+ " | set_user_verified(self, verified: bool) -> None\n",
+ " | Sets whether the authenticator will simulate success or fail on user\n",
+ " | verification.\n",
+ " | \n",
+ " | verified: True if the authenticator will pass user verification, False otherwise.\n",
+ " | \n",
+ " | set_window_position(self, x, y, windowHandle: str = 'current') -> dict\n",
+ " | Sets the x,y position of the current window. (window.moveTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - x: the x-coordinate in pixels to set the window position\n",
+ " | - y: the y-coordinate in pixels to set the window position\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_position(0,0)\n",
+ " | \n",
+ " | set_window_rect(self, x=None, y=None, width=None, height=None) -> dict\n",
+ " | Sets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window. This method is only supported for W3C compatible\n",
+ " | browsers; other browsers should use `set_window_position` and\n",
+ " | `set_window_size`.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_rect(x=10, y=10)\n",
+ " | driver.set_window_rect(width=100, height=200)\n",
+ " | driver.set_window_rect(x=10, y=10, width=100, height=200)\n",
+ " | \n",
+ " | set_window_size(self, width, height, windowHandle: str = 'current') -> None\n",
+ " | Sets the width and height of the current window. (window.resizeTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - width: the width in pixels to set the window to\n",
+ " | - height: the height in pixels to set the window to\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_size(800,600)\n",
+ " | \n",
+ " | start_client(self)\n",
+ " | Called before starting a new session.\n",
+ " | \n",
+ " | This method may be overridden to define custom startup behavior.\n",
+ " | \n",
+ " | start_session(self, capabilities: dict) -> None\n",
+ " | Creates a new session with the desired capabilities.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - capabilities - a capabilities dict to start the session with.\n",
+ " | \n",
+ " | stop_client(self)\n",
+ " | Called after executing a quit command.\n",
+ " | \n",
+ " | This method may be overridden to define custom shutdown\n",
+ " | behavior.\n",
+ " | \n",
+ " | unpin(self, script_key: selenium.webdriver.remote.script_key.ScriptKey) -> None\n",
+ " | Remove a pinned script from storage.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | application_cache\n",
+ " | Returns a ApplicationCache Object to interact with the browser app\n",
+ " | cache.\n",
+ " | \n",
+ " | capabilities\n",
+ " | Returns the drivers current capabilities being used.\n",
+ " | \n",
+ " | current_url\n",
+ " | Gets the URL of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_url\n",
+ " | \n",
+ " | current_window_handle\n",
+ " | Returns the handle of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_window_handle\n",
+ " | \n",
+ " | desired_capabilities\n",
+ " | Returns the drivers current desired capabilities being used.\n",
+ " | \n",
+ " | log_types\n",
+ " | Gets a list of the available log types. This only works with w3c\n",
+ " | compliant browsers.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.log_types\n",
+ " | \n",
+ " | mobile\n",
+ " | \n",
+ " | name\n",
+ " | Returns the name of the underlying browser for this instance.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | name = driver.name\n",
+ " | \n",
+ " | page_source\n",
+ " | Gets the source of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.page_source\n",
+ " | \n",
+ " | switch_to\n",
+ " | :Returns:\n",
+ " | - SwitchTo: an object containing all options to switch focus into\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.switch_to.active_element\n",
+ " | alert = driver.switch_to.alert\n",
+ " | driver.switch_to.default_content()\n",
+ " | driver.switch_to.frame('frame_name')\n",
+ " | driver.switch_to.frame(1)\n",
+ " | driver.switch_to.frame(driver.find_elements(By.TAG_NAME, \"iframe\")[0])\n",
+ " | driver.switch_to.parent_frame()\n",
+ " | driver.switch_to.window('main')\n",
+ " | \n",
+ " | title\n",
+ " | Returns the title of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | title = driver.title\n",
+ " | \n",
+ " | virtual_authenticator_id\n",
+ " | Returns the id of the virtual authenticator.\n",
+ " | \n",
+ " | window_handles\n",
+ " | Returns the handles of all windows within the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.window_handles\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | file_detector\n",
+ " | \n",
+ " | orientation\n",
+ " | Gets the current orientation of the device.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | orientation = driver.orientation\n",
+ " | \n",
+ " | timeouts\n",
+ " | Get all the timeouts that have been set on the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.timeouts\n",
+ " | :rtype: Timeout\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.BaseWebDriver:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " WPEWebKitOptions = class Options(selenium.webdriver.common.options.ArgOptions)\n",
+ " | WPEWebKitOptions() -> None\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Options\n",
+ " | selenium.webdriver.common.options.ArgOptions\n",
+ " | selenium.webdriver.common.options.BaseOptions\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | to_capabilities(self)\n",
+ " | Creates a capabilities with all the options that have been set and\n",
+ " | returns a dictionary with everything.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | binary_location\n",
+ " | Returns the location of the browser binary otherwise an empty\n",
+ " | string.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | KEY = 'wpe:browserOptions'\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | add_argument(self, argument)\n",
+ " | Adds an argument to the list.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - Sets the arguments\n",
+ " | \n",
+ " | ignore_local_proxy_environment_variables(self) -> None\n",
+ " | By calling this you will ignore HTTP_PROXY and HTTPS_PROXY from\n",
+ " | being picked up and used.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | arguments\n",
+ " | :Returns: A list of arguments needed for the browser.\n",
+ " | \n",
+ " | default_capabilities\n",
+ " | Return minimal capabilities necessary as a dictionary.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | BINARY_LOCATION_ERROR = 'Binary Location Must be a String'\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | enable_mobile(self, android_package: Optional[str] = None, android_activity: Optional[str] = None, device_serial: Optional[str] = None) -> None\n",
+ " | Enables mobile browser use for browsers that support it.\n",
+ " | \n",
+ " | :Args:\n",
+ " | android_activity: The name of the android package to start\n",
+ " | \n",
+ " | set_capability(self, name, value) -> None\n",
+ " | Sets a capability.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | capabilities\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | accept_insecure_certs\n",
+ " | \n",
+ " | browser_version\n",
+ " | \n",
+ " | enable_downloads\n",
+ " | \n",
+ " | page_load_strategy\n",
+ " | \n",
+ " | platform_name\n",
+ " | \n",
+ " | proxy\n",
+ " | \n",
+ " | set_window_rect\n",
+ " | \n",
+ " | strict_file_interactability\n",
+ " | \n",
+ " | timeouts\n",
+ " | \n",
+ " | unhandled_prompt_behavior\n",
+ " \n",
+ " WPEWebKitService = class Service(selenium.webdriver.common.service.Service)\n",
+ " | WPEWebKitService(executable_path: str = 'WPEWebDriver', port: int = 0, log_path: Optional[str] = None, service_args: Optional[List[str]] = None, env: Optional[Mapping[str, str]] = None, **kwargs)\n",
+ " | \n",
+ " | A Service class that is responsible for the starting and stopping of\n",
+ " | `WPEWebDriver`.\n",
+ " | \n",
+ " | :param executable_path: install path of the WPEWebDriver executable, defaults to `WPEWebDriver`.\n",
+ " | :param port: Port for the service to run on, defaults to 0 where the operating system will decide.\n",
+ " | :param service_args: (Optional) List of args to be passed to the subprocess when launching the executable.\n",
+ " | :param log_path: (Optional) File path for the file to be opened and passed as the subprocess stdout/stderr handler.\n",
+ " | :param env: (Optional) Mapping of environment variables for the new process, defaults to `os.environ`.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Service\n",
+ " | selenium.webdriver.common.service.Service\n",
+ " | abc.ABC\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, executable_path: str = 'WPEWebDriver', port: int = 0, log_path: Optional[str] = None, service_args: Optional[List[str]] = None, env: Optional[Mapping[str, str]] = None, **kwargs)\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | command_line_args(self) -> List[str]\n",
+ " | A List of program arguments (excluding the executable).\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __del__(self) -> None\n",
+ " | \n",
+ " | assert_process_still_running(self) -> None\n",
+ " | Check if the underlying process is still running.\n",
+ " | \n",
+ " | is_connectable(self) -> bool\n",
+ " | Establishes a socket connection to determine if the service running\n",
+ " | on the port is accessible.\n",
+ " | \n",
+ " | send_remote_shutdown_command(self) -> None\n",
+ " | Dispatch an HTTP request to the shutdown endpoint for the service in\n",
+ " | an attempt to stop it.\n",
+ " | \n",
+ " | start(self) -> None\n",
+ " | Starts the Service.\n",
+ " | \n",
+ " | :Exceptions:\n",
+ " | - WebDriverException : Raised either when it can't start the service\n",
+ " | or when it can't connect to the service\n",
+ " | \n",
+ " | stop(self) -> None\n",
+ " | Stops the service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | service_url\n",
+ " | Gets the url of the Service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | path\n",
+ " \n",
+ " WebKitGTK = class WebDriver(selenium.webdriver.remote.webdriver.WebDriver)\n",
+ " | WebKitGTK(executable_path='WebKitWebDriver', port=0, options=None, desired_capabilities=None, service_log_path=None, keep_alive=False)\n",
+ " | \n",
+ " | Controls the WebKitGTKDriver and allows you to drive the browser.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.WebDriver\n",
+ " | selenium.webdriver.remote.webdriver.BaseWebDriver\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, executable_path='WebKitWebDriver', port=0, options=None, desired_capabilities=None, service_log_path=None, keep_alive=False)\n",
+ " | Creates a new instance of the WebKitGTK driver.\n",
+ " | \n",
+ " | Starts the service and then creates new instance of WebKitGTK Driver.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - executable_path : path to the executable. If the default is used it assumes the executable is in the $PATH.\n",
+ " | - port : port you would like the service to run, if left as 0, a free port will be found.\n",
+ " | - options : an instance of WebKitGTKOptions\n",
+ " | - desired_capabilities : Dictionary object with desired capabilities\n",
+ " | - service_log_path : Path to write service stdout and stderr output.\n",
+ " | - keep_alive : Whether to configure RemoteConnection to use HTTP keep-alive.\n",
+ " | \n",
+ " | quit(self)\n",
+ " | Closes the browser and shuts down the WebKitGTKDriver executable\n",
+ " | that is started when starting the WebKitGTKDriver.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | __enter__(self)\n",
+ " | \n",
+ " | __exit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], traceback: Optional[traceback])\n",
+ " | \n",
+ " | __repr__(self)\n",
+ " | Return repr(self).\n",
+ " | \n",
+ " | add_cookie(self, cookie_dict) -> None\n",
+ " | Adds a cookie to your current session.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - cookie_dict: A dictionary object, with required keys - \"name\" and \"value\";\n",
+ " | optional keys - \"path\", \"domain\", \"secure\", \"httpOnly\", \"expiry\", \"sameSite\"\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure' : True})\n",
+ " | driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'sameSite' : 'Strict'})\n",
+ " | \n",
+ " | add_credential(self, credential: selenium.webdriver.common.virtual_authenticator.Credential) -> None\n",
+ " | Injects a credential into the authenticator.\n",
+ " | \n",
+ " | add_virtual_authenticator(self, options: selenium.webdriver.common.virtual_authenticator.VirtualAuthenticatorOptions) -> None\n",
+ " | Adds a virtual authenticator with the given options.\n",
+ " | \n",
+ " | back(self) -> None\n",
+ " | Goes one step backward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.back()\n",
+ " | \n",
+ " | bidi_connection(self)\n",
+ " | \n",
+ " | close(self) -> None\n",
+ " | Closes the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.close()\n",
+ " | \n",
+ " | create_web_element(self, element_id: str) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Creates a web element with the specified `element_id`.\n",
+ " | \n",
+ " | delete_all_cookies(self) -> None\n",
+ " | Delete all cookies in the scope of the session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_all_cookies()\n",
+ " | \n",
+ " | delete_cookie(self, name) -> None\n",
+ " | Deletes a single cookie with the given name.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.delete_cookie('my_cookie')\n",
+ " | \n",
+ " | delete_downloadable_files(self) -> None\n",
+ " | Deletes all downloadable files.\n",
+ " | \n",
+ " | download_file(self, file_name: str, target_directory: str) -> None\n",
+ " | Downloads a file with the specified file name to the target\n",
+ " | directory.\n",
+ " | \n",
+ " | file_name: The name of the file to download.\n",
+ " | target_directory: The path to the directory to save the downloaded file.\n",
+ " | \n",
+ " | execute(self, driver_command: str, params: dict = None) -> dict\n",
+ " | Sends a command to be executed by a command.CommandExecutor.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - driver_command: The name of the command to execute as a string.\n",
+ " | - params: A dictionary of named parameters to send with the command.\n",
+ " | \n",
+ " | :Returns:\n",
+ " | The command's JSON response loaded into a dictionary object.\n",
+ " | \n",
+ " | execute_async_script(self, script: str, *args)\n",
+ " | Asynchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | script = \"var callback = arguments[arguments.length - 1]; \" \\\n",
+ " | \"window.setTimeout(function(){ callback('timeout') }, 3000);\"\n",
+ " | driver.execute_async_script(script)\n",
+ " | \n",
+ " | execute_script(self, script, *args)\n",
+ " | Synchronously Executes JavaScript in the current window/frame.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - script: The JavaScript to execute.\n",
+ " | - \\*args: Any applicable arguments for your JavaScript.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.execute_script('return document.title;')\n",
+ " | \n",
+ " | file_detector_context(self, file_detector_class, *args, **kwargs)\n",
+ " | Overrides the current file detector (if necessary) in limited\n",
+ " | context. Ensures the original file detector is set afterwards.\n",
+ " | \n",
+ " | Example::\n",
+ " | \n",
+ " | with webdriver.file_detector_context(UselessFileDetector):\n",
+ " | someinput.send_keys('/etc/hosts')\n",
+ " | \n",
+ " | :Args:\n",
+ " | - file_detector_class - Class of the desired file detector. If the class is different\n",
+ " | from the current file_detector, then the class is instantiated with args and kwargs\n",
+ " | and used as a file detector during the duration of the context manager.\n",
+ " | - args - Optional arguments that get passed to the file detector class during\n",
+ " | instantiation.\n",
+ " | - kwargs - Keyword arguments, passed the same way as args.\n",
+ " | \n",
+ " | find_element(self, by='id', value: Optional[str] = None) -> selenium.webdriver.remote.webelement.WebElement\n",
+ " | Find an element given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.find_element(By.ID, 'foo')\n",
+ " | \n",
+ " | :rtype: WebElement\n",
+ " | \n",
+ " | find_elements(self, by='id', value: Optional[str] = None) -> List[selenium.webdriver.remote.webelement.WebElement]\n",
+ " | Find elements given a By strategy and locator.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | elements = driver.find_elements(By.CLASS_NAME, 'foo')\n",
+ " | \n",
+ " | :rtype: list of WebElement\n",
+ " | \n",
+ " | forward(self) -> None\n",
+ " | Goes one step forward in the browser history.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.forward()\n",
+ " | \n",
+ " | fullscreen_window(self) -> None\n",
+ " | Invokes the window manager-specific 'full screen' operation.\n",
+ " | \n",
+ " | get(self, url: str) -> None\n",
+ " | Loads a web page in the current browser session.\n",
+ " | \n",
+ " | get_cookie(self, name) -> Optional[Dict]\n",
+ " | Get a single cookie by name. Returns the cookie if found, None if\n",
+ " | not.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookie('my_cookie')\n",
+ " | \n",
+ " | get_cookies(self) -> List[dict]\n",
+ " | Returns a set of dictionaries, corresponding to cookies visible in\n",
+ " | the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_cookies()\n",
+ " | \n",
+ " | get_credentials(self) -> List[selenium.webdriver.common.virtual_authenticator.Credential]\n",
+ " | Returns the list of credentials owned by the authenticator.\n",
+ " | \n",
+ " | get_downloadable_files(self) -> dict\n",
+ " | Retrieves the downloadable files as a map of file names and their\n",
+ " | corresponding URLs.\n",
+ " | \n",
+ " | get_log(self, log_type)\n",
+ " | Gets the log for a given log type.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - log_type: type of log that which will be returned\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_log('browser')\n",
+ " | driver.get_log('driver')\n",
+ " | driver.get_log('client')\n",
+ " | driver.get_log('server')\n",
+ " | \n",
+ " | get_pinned_scripts(self) -> List[str]\n",
+ " | \n",
+ " | get_screenshot_as_base64(self) -> str\n",
+ " | Gets the screenshot of the current window as a base64 encoded string\n",
+ " | which is useful in embedded images in HTML.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_base64()\n",
+ " | \n",
+ " | get_screenshot_as_file(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_file('/Screenshots/foo.png')\n",
+ " | \n",
+ " | get_screenshot_as_png(self) -> bytes\n",
+ " | Gets the screenshot of the current window as a binary data.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_screenshot_as_png()\n",
+ " | \n",
+ " | get_window_position(self, windowHandle='current') -> dict\n",
+ " | Gets the x,y position of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_position()\n",
+ " | \n",
+ " | get_window_rect(self) -> dict\n",
+ " | Gets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_rect()\n",
+ " | \n",
+ " | get_window_size(self, windowHandle: str = 'current') -> dict\n",
+ " | Gets the width and height of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.get_window_size()\n",
+ " | \n",
+ " | implicitly_wait(self, time_to_wait: float) -> None\n",
+ " | Sets a sticky timeout to implicitly wait for an element to be found,\n",
+ " | or a command to complete. This method only needs to be called one time\n",
+ " | per session. To set the timeout for calls to execute_async_script, see\n",
+ " | set_script_timeout.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: Amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.implicitly_wait(30)\n",
+ " | \n",
+ " | maximize_window(self) -> None\n",
+ " | Maximizes the current window that webdriver is using.\n",
+ " | \n",
+ " | minimize_window(self) -> None\n",
+ " | Invokes the window manager-specific 'minimize' operation.\n",
+ " | \n",
+ " | pin_script(self, script: str, script_key=None) -> selenium.webdriver.remote.script_key.ScriptKey\n",
+ " | Store common javascript scripts to be executed later by a unique\n",
+ " | hashable ID.\n",
+ " | \n",
+ " | print_page(self, print_options: Optional[selenium.webdriver.common.print_page_options.PrintOptions] = None) -> str\n",
+ " | Takes PDF of the current page.\n",
+ " | \n",
+ " | The driver makes a best effort to return a PDF based on the\n",
+ " | provided parameters.\n",
+ " | \n",
+ " | refresh(self) -> None\n",
+ " | Refreshes the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.refresh()\n",
+ " | \n",
+ " | remove_all_credentials(self) -> None\n",
+ " | Removes all credentials from the authenticator.\n",
+ " | \n",
+ " | remove_credential(self, credential_id: Union[str, bytearray]) -> None\n",
+ " | Removes a credential from the authenticator.\n",
+ " | \n",
+ " | remove_virtual_authenticator(self) -> None\n",
+ " | Removes a previously added virtual authenticator.\n",
+ " | \n",
+ " | The authenticator is no longer valid after removal, so no\n",
+ " | methods may be called.\n",
+ " | \n",
+ " | save_screenshot(self, filename) -> bool\n",
+ " | Saves a screenshot of the current window to a PNG image file.\n",
+ " | Returns False if there is any IOError, else returns True. Use full\n",
+ " | paths in your filename.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - filename: The full path you wish to save your screenshot to. This\n",
+ " | should end with a `.png` extension.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.save_screenshot('/Screenshots/foo.png')\n",
+ " | \n",
+ " | set_page_load_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time to wait for a page load to complete before\n",
+ " | throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_page_load_timeout(30)\n",
+ " | \n",
+ " | set_script_timeout(self, time_to_wait: float) -> None\n",
+ " | Set the amount of time that the script should wait during an\n",
+ " | execute_async_script call before throwing an error.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - time_to_wait: The amount of time to wait (in seconds)\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_script_timeout(30)\n",
+ " | \n",
+ " | set_user_verified(self, verified: bool) -> None\n",
+ " | Sets whether the authenticator will simulate success or fail on user\n",
+ " | verification.\n",
+ " | \n",
+ " | verified: True if the authenticator will pass user verification, False otherwise.\n",
+ " | \n",
+ " | set_window_position(self, x, y, windowHandle: str = 'current') -> dict\n",
+ " | Sets the x,y position of the current window. (window.moveTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - x: the x-coordinate in pixels to set the window position\n",
+ " | - y: the y-coordinate in pixels to set the window position\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_position(0,0)\n",
+ " | \n",
+ " | set_window_rect(self, x=None, y=None, width=None, height=None) -> dict\n",
+ " | Sets the x, y coordinates of the window as well as height and width\n",
+ " | of the current window. This method is only supported for W3C compatible\n",
+ " | browsers; other browsers should use `set_window_position` and\n",
+ " | `set_window_size`.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_rect(x=10, y=10)\n",
+ " | driver.set_window_rect(width=100, height=200)\n",
+ " | driver.set_window_rect(x=10, y=10, width=100, height=200)\n",
+ " | \n",
+ " | set_window_size(self, width, height, windowHandle: str = 'current') -> None\n",
+ " | Sets the width and height of the current window. (window.resizeTo)\n",
+ " | \n",
+ " | :Args:\n",
+ " | - width: the width in pixels to set the window to\n",
+ " | - height: the height in pixels to set the window to\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.set_window_size(800,600)\n",
+ " | \n",
+ " | start_client(self)\n",
+ " | Called before starting a new session.\n",
+ " | \n",
+ " | This method may be overridden to define custom startup behavior.\n",
+ " | \n",
+ " | start_session(self, capabilities: dict) -> None\n",
+ " | Creates a new session with the desired capabilities.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - capabilities - a capabilities dict to start the session with.\n",
+ " | \n",
+ " | stop_client(self)\n",
+ " | Called after executing a quit command.\n",
+ " | \n",
+ " | This method may be overridden to define custom shutdown\n",
+ " | behavior.\n",
+ " | \n",
+ " | unpin(self, script_key: selenium.webdriver.remote.script_key.ScriptKey) -> None\n",
+ " | Remove a pinned script from storage.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | application_cache\n",
+ " | Returns a ApplicationCache Object to interact with the browser app\n",
+ " | cache.\n",
+ " | \n",
+ " | capabilities\n",
+ " | Returns the drivers current capabilities being used.\n",
+ " | \n",
+ " | current_url\n",
+ " | Gets the URL of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_url\n",
+ " | \n",
+ " | current_window_handle\n",
+ " | Returns the handle of the current window.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.current_window_handle\n",
+ " | \n",
+ " | desired_capabilities\n",
+ " | Returns the drivers current desired capabilities being used.\n",
+ " | \n",
+ " | log_types\n",
+ " | Gets a list of the available log types. This only works with w3c\n",
+ " | compliant browsers.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.log_types\n",
+ " | \n",
+ " | mobile\n",
+ " | \n",
+ " | name\n",
+ " | Returns the name of the underlying browser for this instance.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | name = driver.name\n",
+ " | \n",
+ " | page_source\n",
+ " | Gets the source of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.page_source\n",
+ " | \n",
+ " | switch_to\n",
+ " | :Returns:\n",
+ " | - SwitchTo: an object containing all options to switch focus into\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | element = driver.switch_to.active_element\n",
+ " | alert = driver.switch_to.alert\n",
+ " | driver.switch_to.default_content()\n",
+ " | driver.switch_to.frame('frame_name')\n",
+ " | driver.switch_to.frame(1)\n",
+ " | driver.switch_to.frame(driver.find_elements(By.TAG_NAME, \"iframe\")[0])\n",
+ " | driver.switch_to.parent_frame()\n",
+ " | driver.switch_to.window('main')\n",
+ " | \n",
+ " | title\n",
+ " | Returns the title of the current page.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | title = driver.title\n",
+ " | \n",
+ " | virtual_authenticator_id\n",
+ " | Returns the id of the virtual authenticator.\n",
+ " | \n",
+ " | window_handles\n",
+ " | Returns the handles of all windows within the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.window_handles\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.WebDriver:\n",
+ " | \n",
+ " | file_detector\n",
+ " | \n",
+ " | orientation\n",
+ " | Gets the current orientation of the device.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | orientation = driver.orientation\n",
+ " | \n",
+ " | timeouts\n",
+ " | Get all the timeouts that have been set on the current session.\n",
+ " | \n",
+ " | :Usage:\n",
+ " | ::\n",
+ " | \n",
+ " | driver.timeouts\n",
+ " | :rtype: Timeout\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.remote.webdriver.BaseWebDriver:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " \n",
+ " WebKitGTKOptions = class Options(selenium.webdriver.common.options.ArgOptions)\n",
+ " | WebKitGTKOptions() -> None\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Options\n",
+ " | selenium.webdriver.common.options.ArgOptions\n",
+ " | selenium.webdriver.common.options.BaseOptions\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self) -> None\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | to_capabilities(self)\n",
+ " | Creates a capabilities with all the options that have been set and\n",
+ " | returns a dictionary with everything.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties defined here:\n",
+ " | \n",
+ " | default_capabilities\n",
+ " | Return minimal capabilities necessary as a dictionary.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors defined here:\n",
+ " | \n",
+ " | binary_location\n",
+ " | :Returns: The location of the browser binary otherwise an empty\n",
+ " | string.\n",
+ " | \n",
+ " | overlay_scrollbars_enabled\n",
+ " | :Returns: Whether overlay scrollbars should be enabled.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | KEY = 'webkitgtk:browserOptions'\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | add_argument(self, argument)\n",
+ " | Adds an argument to the list.\n",
+ " | \n",
+ " | :Args:\n",
+ " | - Sets the arguments\n",
+ " | \n",
+ " | ignore_local_proxy_environment_variables(self) -> None\n",
+ " | By calling this you will ignore HTTP_PROXY and HTTPS_PROXY from\n",
+ " | being picked up and used.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | arguments\n",
+ " | :Returns: A list of arguments needed for the browser.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes inherited from selenium.webdriver.common.options.ArgOptions:\n",
+ " | \n",
+ " | BINARY_LOCATION_ERROR = 'Binary Location Must be a String'\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | enable_mobile(self, android_package: Optional[str] = None, android_activity: Optional[str] = None, device_serial: Optional[str] = None) -> None\n",
+ " | Enables mobile browser use for browsers that support it.\n",
+ " | \n",
+ " | :Args:\n",
+ " | android_activity: The name of the android package to start\n",
+ " | \n",
+ " | set_capability(self, name, value) -> None\n",
+ " | Sets a capability.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | capabilities\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.options.BaseOptions:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | accept_insecure_certs\n",
+ " | \n",
+ " | browser_version\n",
+ " | \n",
+ " | enable_downloads\n",
+ " | \n",
+ " | page_load_strategy\n",
+ " | \n",
+ " | platform_name\n",
+ " | \n",
+ " | proxy\n",
+ " | \n",
+ " | set_window_rect\n",
+ " | \n",
+ " | strict_file_interactability\n",
+ " | \n",
+ " | timeouts\n",
+ " | \n",
+ " | unhandled_prompt_behavior\n",
+ " \n",
+ " WebKitGTKService = class Service(selenium.webdriver.common.service.Service)\n",
+ " | WebKitGTKService(executable_path: str = 'WebKitWebDriver', port: int = 0, log_path: Optional[str] = None, service_args: Optional[List[str]] = None, env: Optional[Mapping[str, str]] = None, **kwargs)\n",
+ " | \n",
+ " | A Service class that is responsible for the starting and stopping of\n",
+ " | `WPEWebDriver`.\n",
+ " | \n",
+ " | :param executable_path: install path of the WebKitWebDriver executable, defaults to `WebKitWebDriver`.\n",
+ " | :param port: Port for the service to run on, defaults to 0 where the operating system will decide.\n",
+ " | :param service_args: (Optional) List of args to be passed to the subprocess when launching the executable.\n",
+ " | :param log_path: (Optional) File path for the file to be opened and passed as the subprocess stdout/stderr handler.\n",
+ " | :param env: (Optional) Mapping of environment variables for the new process, defaults to `os.environ`.\n",
+ " | \n",
+ " | Method resolution order:\n",
+ " | Service\n",
+ " | selenium.webdriver.common.service.Service\n",
+ " | abc.ABC\n",
+ " | builtins.object\n",
+ " | \n",
+ " | Methods defined here:\n",
+ " | \n",
+ " | __init__(self, executable_path: str = 'WebKitWebDriver', port: int = 0, log_path: Optional[str] = None, service_args: Optional[List[str]] = None, env: Optional[Mapping[str, str]] = None, **kwargs)\n",
+ " | Initialize self. See help(type(self)) for accurate signature.\n",
+ " | \n",
+ " | command_line_args(self) -> List[str]\n",
+ " | A List of program arguments (excluding the executable).\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data and other attributes defined here:\n",
+ " | \n",
+ " | __abstractmethods__ = frozenset()\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Methods inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __del__(self) -> None\n",
+ " | \n",
+ " | assert_process_still_running(self) -> None\n",
+ " | Check if the underlying process is still running.\n",
+ " | \n",
+ " | is_connectable(self) -> bool\n",
+ " | Establishes a socket connection to determine if the service running\n",
+ " | on the port is accessible.\n",
+ " | \n",
+ " | send_remote_shutdown_command(self) -> None\n",
+ " | Dispatch an HTTP request to the shutdown endpoint for the service in\n",
+ " | an attempt to stop it.\n",
+ " | \n",
+ " | start(self) -> None\n",
+ " | Starts the Service.\n",
+ " | \n",
+ " | :Exceptions:\n",
+ " | - WebDriverException : Raised either when it can't start the service\n",
+ " | or when it can't connect to the service\n",
+ " | \n",
+ " | stop(self) -> None\n",
+ " | Stops the service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Readonly properties inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | service_url\n",
+ " | Gets the url of the Service.\n",
+ " | \n",
+ " | ----------------------------------------------------------------------\n",
+ " | Data descriptors inherited from selenium.webdriver.common.service.Service:\n",
+ " | \n",
+ " | __dict__\n",
+ " | dictionary for instance variables (if defined)\n",
+ " | \n",
+ " | __weakref__\n",
+ " | list of weak references to the object (if defined)\n",
+ " | \n",
+ " | path\n",
+ "\n",
+ "DATA\n",
+ " __all__ = ['Firefox', 'FirefoxProfile', 'FirefoxOptions', 'FirefoxServ...\n",
"\n",
"VERSION\n",
- " 3.14.1\n",
+ " 4.15.2\n",
"\n",
"FILE\n",
- " /opt/anaconda3/lib/python3.7/site-packages/selenium/webdriver/__init__.py\n",
+ " /opt/anaconda3/lib/python3.9/site-packages/selenium/webdriver/__init__.py\n",
"\n",
"\n"
]
@@ -202,7 +7760,7 @@
"source": [
"### 下载和设置Webdriver\n",
"\n",
- "1. 对于Chrome需要的webdriver下载地址,**一定要确保版本正确**。\n",
+ "1. 对于Chrome需要的webdriver下载地址,**一定要确保版本正确**:Chrome浏览器与webdriver版本对应。\n",
"\n",
"http://chromedriver.storage.googleapis.com/index.html\n",
"\n",
@@ -240,11 +7798,11 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 8,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T07:13:44.062629Z",
- "start_time": "2021-11-01T07:13:44.006400Z"
+ "end_time": "2023-11-10T07:10:32.346957Z",
+ "start_time": "2023-11-10T07:10:24.798992Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -262,27 +7820,12 @@
"source": [
"from selenium import webdriver\n",
"\n",
- "browser = webdriver.Chrome(executable_path = '/opt/anaconda3/bin/chromedriver')\n",
+ "# webdriver.Chrome?\n",
+ "\n",
+ "browser = webdriver.Chrome()#executable_path = '/opt/anaconda3/bin/chromedriver')\n",
"browser.get(\"http://music.163.com\") \n",
"#print(browser.page_source)\n",
"print('i am fine!')\n",
- "#browser.close() "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {
- "ExecuteTime": {
- "end_time": "2021-11-01T07:14:48.860919Z",
- "start_time": "2021-11-01T07:14:48.792504Z"
- },
- "slideshow": {
- "slide_type": "subslide"
- }
- },
- "outputs": [],
- "source": [
"browser.close() "
]
},
@@ -313,11 +7856,25 @@
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": 17,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T07:16:49.347550Z",
- "start_time": "2021-11-01T07:16:45.332128Z"
+ "end_time": "2023-11-10T07:21:55.684529Z",
+ "start_time": "2023-11-10T07:21:55.681605Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "from selenium.webdriver.common.by import By\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "ExecuteTime": {
+ "end_time": "2023-11-10T07:23:07.566101Z",
+ "start_time": "2023-11-10T07:23:00.796463Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -328,21 +7885,9 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "\n",
- "\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:5: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead\n",
- " \"\"\"\n",
- "/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead\n",
- " import sys\n",
- "/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:9: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead\n",
- " if __name__ == '__main__':\n"
+ "\n",
+ "\n",
+ "\n"
]
}
],
@@ -351,11 +7896,11 @@
"browser = webdriver.Chrome()\n",
"browser.get(\"http://music.163.com\")\n",
"# \n",
- "input_first = browser.find_element_by_id(\"srch\") \n",
+ "input_first = browser.find_element(By.ID, \"srch\") \n",
"#srch\n",
- "input_second = browser.find_element_by_css_selector(\"#srch\")\n",
+ "input_second = browser.find_element(By.CSS_SELECTOR, \"#srch\")\n",
"# //*[@id=\"srch\"]\n",
- "input_third = browser.find_element_by_xpath('//*[@id=\"srch\"]')\n",
+ "input_third = browser.find_element(By.XPATH, '//*[@id=\"srch\"]')\n",
"print(input_first)\n",
"print(input_second)\n",
"print(input_third)\n",
@@ -372,14 +7917,14 @@
"source": [
"## 常用的查找元素方法:\n",
"\n",
- "- find_element_by_name\n",
- "- find_element_by_id\n",
- "- find_element_by_xpath\n",
- "- find_element_by_link_text\n",
- "- find_element_by_partial_link_text\n",
- "- find_element_by_tag_name\n",
- "- find_element_by_class_name\n",
- "- find_element_by_css_selector"
+ "- find_element(By.ID, \"id\")\n",
+ "- find_element(By.NAME, \"name\")\n",
+ "- find_element(By.XPATH, \"xpath\")\n",
+ "- find_element(By.LINK_TEXT, \"link text\")\n",
+ "- find_element(By.PARTIAL_LINK_TEXT, \"partial link text\")\n",
+ "- find_element(By.TAG_NAME, \"tag name\")\n",
+ "- find_element(By.CLASS_NAME, \"class name\")\n",
+ "- find_element(By.CSS_SELECTOR, \"css selector\")"
]
},
{
@@ -448,8 +7993,8 @@
"execution_count": 19,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T07:17:58.153146Z",
- "start_time": "2021-11-01T07:17:53.123805Z"
+ "end_time": "2023-11-10T07:25:26.633226Z",
+ "start_time": "2023-11-10T07:25:19.351116Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -460,22 +8005,14 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "[]\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: DeprecationWarning: find_elements_by_* commands are deprecated. Please use find_elements() instead\n",
- " This is separate from the ipykernel package so we can avoid doing imports until\n"
+ "[]\n"
]
}
],
"source": [
"browser = webdriver.Chrome()\n",
"browser.get(\"http://music.163.com\")\n",
- "lis = browser.find_elements_by_css_selector('body')\n",
+ "lis = browser.find_elements(By.CSS_SELECTOR, 'body')\n",
"print(lis)\n",
"browser.close() "
]
@@ -493,14 +8030,14 @@
"> lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')\n",
"\n",
"同样的在单个元素中查找的方法在多个元素查找中同样存在:\n",
- "- find_elements_by_name\n",
- "- find_elements_by_id\n",
- "- find_elements_by_xpath\n",
- "- find_elements_by_link_text\n",
- "- find_elements_by_partial_link_text\n",
- "- find_elements_by_tag_name\n",
- "- find_elements_by_class_name\n",
- "- find_elements_by_css_selector"
+ "- find_elements(By.ID, \"id\")\n",
+ "- find_elements(By.NAME, \"name\")\n",
+ "- find_elements(By.XPATH, \"xpath\")\n",
+ "- find_elements(By.LINK_TEXT, \"link text\")\n",
+ "- find_elements(By.PARTIAL_LINK_TEXT, \"partial link text\")\n",
+ "- find_elements(By.TAG_NAME, \"tag name\")\n",
+ "- find_elements(By.CLASS_NAME, \"class name\")\n",
+ "- find_elements(By.CSS_SELECTOR, \"css selector\")"
]
},
{
@@ -517,39 +8054,29 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": 26,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T07:19:22.572753Z",
- "start_time": "2021-11-01T07:19:12.725169Z"
+ "end_time": "2023-11-10T08:19:22.683636Z",
+ "start_time": "2023-11-10T08:19:07.017913Z"
},
"slideshow": {
"slide_type": "subslide"
}
},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:6: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead\n",
- " \n"
- ]
- }
- ],
+ "outputs": [],
"source": [
- "from selenium import webdriver\n",
"import time\n",
- "browser = webdriver.Chrome()\n",
"\n",
+ "browser = webdriver.Chrome()\n",
"browser.get(\"https://music.163.com/\")\n",
- "input_str = browser.find_element_by_id('srch')\n",
+ "input_str = browser.find_element(By.ID, 'srch')\n",
"input_str.send_keys(\"周杰伦\")\n",
"time.sleep(3) #休眠,模仿人工搜索\n",
- "input_str.clear()\n",
- "input_str.send_keys(\"林俊杰\")\n",
- "time.sleep(3)\n",
- "#browser.close()"
+ "#input_str.clear()\n",
+ "#input_str.send_keys(\"林俊杰\")\n",
+ "#time.sleep(3)\n",
+ "browser.close()"
]
},
{
@@ -580,11 +8107,11 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 25,
"metadata": {
"ExecuteTime": {
- "end_time": "2021-11-01T07:20:08.041630Z",
- "start_time": "2021-11-01T07:20:01.048709Z"
+ "end_time": "2023-11-10T07:33:40.626290Z",
+ "start_time": "2023-11-10T07:33:32.830035Z"
},
"slideshow": {
"slide_type": "subslide"
@@ -594,7 +8121,7 @@
"source": [
"from selenium import webdriver\n",
"browser = webdriver.Chrome()\n",
- "browser.get(\"https://www.zhihu.com/explore/\")\n",
+ "browser.get(\"http://www.cppcc.gov.cn/\")\n",
"browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')\n",
"#browser.execute_script('alert(\"To Bottom\")')\n",
"time.sleep(3)\n",
@@ -913,7 +8440,7 @@
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
@@ -927,7 +8454,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.6"
+ "version": "3.9.7"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
@@ -957,10 +8484,10 @@
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {
- "height": "47.5875px",
- "left": "1376.64px",
- "top": "54px",
- "width": "159.363px"
+ "height": "47.571px",
+ "left": "1423.63px",
+ "top": "0px",
+ "width": "159.176px"
},
"toc_section_display": false,
"toc_window_display": true
diff --git a/08-01-statistics-thinking.ipynb b/08-01-statistics-thinking.ipynb
index 3a83182..0491939 100644
--- a/08-01-statistics-thinking.ipynb
+++ b/08-01-statistics-thinking.ipynb
@@ -306,7 +306,7 @@
"\n",
"- Variability Principle\n",
" - Social Grouping Principle\n",
- " - Social Context Principle"
+ " - Social Context Principle"
]
},
{
@@ -459,7 +459,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-07T00:46:03.628775Z",
@@ -473,7 +473,7 @@
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "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\n",
"text/plain": [
"