{"id":1559,"date":"2023-03-25T11:26:10","date_gmt":"2023-03-25T03:26:10","guid":{"rendered":""},"modified":"2023-03-25T11:26:10","modified_gmt":"2023-03-25T03:26:10","slug":"Python\u722c\u866bSelenium","status":"publish","type":"post","link":"https:\/\/bianchenghao6.com\/1559.html","title":{"rendered":"Python\u722c\u866bSelenium"},"content":{"rendered":"
\n
Python\u722c\u866bSelenium\u8be6\u7ec6\u6559\u7a0b<\/span>\n <\/div>\n Selenium \u662f\u81ea\u52a8\u5316\u6d4b\u8bd5\u5de5\u5177\u3002\u5b83\u652f\u6301\u5404\u79cd\u6d4f\u89c8\u5668\uff0c\u5305\u62ec Chrome\uff0cSafari\uff0cFirefox \u7b49\u4e3b\u6d41\u754c\u9762\u5f0f\u6d4f\u89c8\u5668\uff0cSelenium \u652f\u6301\u8fd9\u4e9b\u6d4f\u89c8\u5668\u9a71\u52a8\u3002Selenium\u652f\u6301\u591a\u79cd\u8bed\u8a00\u5f00\u53d1\uff0c\u6bd4\u5982 Python\uff0cJava\uff0cC\uff0cRuby\u7b49\u7b49\u3002<\/p>\n Selenium\u73af\u5883\u642d\u5efa\u53ca\u914d\u7f6e\u8be6\u7ec6\u8bf4\u660e\u8bf7\u70b9\u51fb\uff1ahttps:\/\/www.lidihuo.com\/python\/python-spider-install-selenium.html<\/p>\n \u542f\u52a8Chrome\u6d4f\u89c8\u5668\uff1a<\/p>\n \u542f\u52a8Firefox\u6d4f\u89c8\u5668\uff1a<\/p>\n \u542f\u52a8IE\u6d4f\u89c8\u5668\uff1a<\/p>\n Headless Chrome \u662f Chrome \u6d4f\u89c8\u5668\u7684\u65e0\u754c\u9762\u5f62\u6001\uff0c\u53ef\u4ee5\u5728\u4e0d\u6253\u5f00\u6d4f\u89c8\u5668\u7684\u524d\u63d0\u4e0b\uff0c\u4f7f\u7528\u6240\u6709 Chrome \u652f\u6301\u7684\u7279\u6027\u8fd0\u884c\u4f60\u7684\u7a0b\u5e8f\u3002\u76f8\u6bd4\u4e8e\u73b0\u4ee3\u6d4f\u89c8\u5668\uff0cHeadless Chrome \u66f4\u52a0\u65b9\u4fbf\u6d4b\u8bd5 web \u5e94\u7528\uff0c\u83b7\u5f97\u7f51\u7ad9\u7684\u622a\u56fe\uff0c\u505a\u722c\u866b\u6293\u53d6\u4fe1\u606f\u7b49\u3002\u76f8\u6bd4\u4e8e\u8f83\u65e9\u7684 PhantomJS\uff0cSlimerJS \u7b49\uff0cHeadless Chrome \u5219\u66f4\u52a0\u8d34\u8fd1\u6d4f\u89c8\u5668\u73af\u5883\u3002<\/p>\n Headless Chrome \u5bf9Chrome\u7248\u672c\u8981\u6c42<\/strong>\uff1a Selenium\u64cd\u4f5c\u6d4f\u89c8\u5668\u662f\u4e0d\u52a0\u8f7d\u4efb\u4f55\u914d\u7f6e\u7684\uff0c\u4e0b\u9762\u662f\u5173\u4e8e\u52a0\u8f7dChrome\u914d\u7f6e\u7684\u65b9\u6cd5\uff1a<\/p>\n \u7528Chrome\u5730\u5740\u680f\u8f93\u5165chrome:\/\/version\/\uff0c\u67e5\u770b\u81ea\u5df1\u7684\u201c\u4e2a\u4eba\u8d44\u6599\u8def\u5f84\u201d\uff0c\u7136\u540e\u5728\u6d4f\u89c8\u5668\u542f\u52a8\u65f6\uff0c\u8c03\u7528\u8fd9\u4e2a\u914d\u7f6e\u6587\u4ef6\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n \u800c\u52a0\u8f7dFirefox\u914d\u7f6e\u7684\u65b9\u6cd5\u6709\u4e9b\u4e0d\u540c\uff1a<\/p>\n \u6253\u5f00Firefox\u70b9\u53f3\u4e0a\u89d2\u8bbe\u7f6e>\uff1f\uff08\u5e2e\u52a9\uff09>\u6545\u969c\u6392\u9664\u4fe1\u606f>\u663e\u793a\u6587\u4ef6\u5939\uff0c\u6253\u5f00\u540e\u628a\u8def\u5f84\u590d\u5236\u4e0b\u6765\u5c31\u53ef\u4ee5\u4e86<\/p>\n \u5bf9\u8c61\u7684\u5b9a\u4f4d\u5e94\u8be5\u662f\u81ea\u52a8\u5316\u6d4b\u8bd5\u7684\u6838\u5fc3\uff0c\u8981\u60f3\u64cd\u4f5c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u9996\u5148\u5e94\u8be5\u8bc6\u522b\u8fd9\u4e2a\u5bf9\u8c61\u3002\u4e00\u4e2a\u5bf9\u8c61\u5c31\u662f\u4e00\u4e2a\u4eba\u4e00\u6837\uff0c\u4ed6\u4f1a\u6709\u5404\u79cd\u7684\u7279\u5f81\uff08\u5c5e\u6027\uff09\uff0c\u5982\u6bd4\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2a\u4eba\u7684\u8eab\u4efd\u8bc1\u53f7\uff0c\u59d3\u540d\uff0c\u6216\u8005\u4ed6\u4f4f\u5728\u54ea\u4e2a\u8857\u9053\u3001\u697c\u5c42\u3001\u95e8\u724c\u627e\u5230\u8fd9\u4e2a\u4eba\u3002\u90a3\u4e48\u4e00\u4e2a\u5bf9\u8c61\u4e5f\u6709\u7c7b\u4f3c\u7684\u5c5e\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e2a\u5c5e\u6027\u627e\u5230\u8fd9\u5bf9\u8c61\u3002<\/p>\n webdriver \u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u7684\u5bf9\u8c61\u5b9a\u4f4d\u65b9\u6cd5\uff0c\u5e38\u7528\u7684\u6709\u4ee5\u4e0b\u51e0\u79cd\uff1a<\/p>\n id\u5b9a\u4f4d\uff1afind_element_by_id()<\/span> \u5728\u5b9e\u9645\u8fdb\u884c\u5143\u7d20\u5b9a\u4f4d\u65f6\uff0c\u7ecf\u5e38\u53d1\u73b0class name\u662f\u6709\u591a\u4e2aclass\u7ec4\u5408\u7684\u590d\u5408\u7c7b\uff0c\u4e2d\u95f4\u4ee5\u7a7a\u683c\u9694\u5f00\u3002\u5982\u679c\u76f4\u63a5\u8fdb\u884c\u5b9a\u4f4d\u4f1a\u51fa\u73b0\u62a5\u9519\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u5904\u7406\uff1a<\/p>\n class\u5c5e\u6027\u552f\u4e00\u4f46\u662f\u6709\u7a7a\u683c\uff0c\u9009\u62e9\u7a7a\u683c\u4e24\u8fb9\u552f\u4e00\u7684\u90a3\u4e00\u4e2a<\/span> \u53c2\u8003\u4ee3\u7801\uff1a<\/p>\n \u6709\u65f6\u5019\u4e3a\u4e86\u4fdd\u8bc1\u811a\u672c\u8fd0\u884c\u7684\u7a33\u5b9a\u6027\uff0c\u9700\u8981\u811a\u672c\u4e2d\u6dfb\u52a0\u7b49\u5f85\u65f6\u95f4\u3002<\/p>\n \u7b2c\u4e00\u79cd\u4e5f\u662f\u6700\u7b80\u5355\u7c97\u66b4\u7684\u4e00\u79cd\u529e\u6cd5\u5c31\u662f\u5f3a\u5236\u7b49\u5f85sleep(xx)\uff0c\u9700\u8981\u5f15\u5165\u201ctime\u201d\u6a21\u5757\uff0c\u8fd9\u79cd\u53eb\u5f3a\u5236\u7b49\u5f85\uff0c\u4e0d\u7ba1\u4f60\u6d4f\u89c8\u5668\u662f\u5426\u52a0\u8f7d\u5b8c\u4e86\uff0c\u7a0b\u5e8f\u90fd\u5f97\u7b49\u5f853\u79d2\uff0c3\u79d2\u4e00\u5230\uff0c\u7ee7\u7eed\u6267\u884c\u4e0b\u9762\u7684\u4ee3\u7801\uff0c\u4f5c\u4e3a\u8c03\u8bd5\u5f88\u6709\u7528\uff0c\u6709\u65f6\u5019\u4e5f\u53ef\u4ee5\u5728\u4ee3\u7801\u91cc\u8fd9\u6837\u7b49\u5f85\uff0c\u4e0d\u8fc7\u4e0d\u5efa\u8bae\u603b\u7528\u8fd9\u79cd\u7b49\u5f85\u65b9\u5f0f\uff0c\u592a\u6b7b\u677f\uff0c\u4e25\u91cd\u5f71\u54cd\u7a0b\u5e8f\u6267\u884c\u901f\u5ea6\u3002<\/p>\n \u7b2c\u4e8c\u79cd\u529e\u6cd5\u53eb\u9690\u6027\u7b49\u5f85\uff0c\u901a\u8fc7\u6dfb\u52a0 implicitly_wait() \u65b9\u6cd5\u5c31\u53ef\u4ee5\u65b9\u4fbf\u7684\u5b9e\u73b0\u667a\u80fd\u7b49\u5f85\uff1bimplicitly_wait(30) \u7684\u7528\u6cd5\u5e94\u8be5\u6bd4 time.sleep() \u66f4\u667a\u80fd\uff0c\u540e\u8005\u53ea\u80fd\u9009\u62e9\u4e00\u4e2a\u56fa\u5b9a\u7684\u65f6\u95f4\u7684\u7b49\u5f85\uff0c\u524d\u8005\u53ef\u4ee5 \u5728\u4e00\u4e2a\u65f6\u95f4\u8303\u56f4\u5185\u667a\u80fd\u7684\u7b49\u5f85\u3002<\/p>\n \u9690\u5f62\u7b49\u5f85\u662f\u8bbe\u7f6e\u4e86\u4e00\u4e2a\u6700\u957f\u7b49\u5f85\u65f6\u95f4\uff0c\u5982\u679c\u5728\u89c4\u5b9a\u65f6\u95f4\u5185\u7f51\u9875\u52a0\u8f7d\u5b8c\u6210\uff0c\u5219\u6267\u884c\u4e0b\u4e00\u6b65\uff0c\u5426\u5219\u4e00\u76f4\u7b49\u5230\u65f6\u95f4\u622a\u6b62\uff0c\u7136\u540e\u6267\u884c\u4e0b\u4e00\u6b65\u3002\u6ce8\u610f\u8fd9\u91cc\u6709\u4e00\u4e2a\u5f0a\u7aef\uff0c\u90a3\u5c31\u662f\u7a0b\u5e8f\u4f1a\u4e00\u76f4\u7b49\u5f85\u6574\u4e2a\u9875\u9762\u52a0\u8f7d\u5b8c\u6210\uff0c\u4e5f\u5c31\u662f\u4e00\u822c\u60c5\u51b5\u4e0b\u4f60\u770b\u5230\u6d4f\u89c8\u5668\u6807\u7b7e\u680f\u90a3\u4e2a\u5c0f\u5708\u4e0d\u518d\u8f6c\uff0c\u624d\u4f1a\u6267\u884c\u4e0b\u4e00\u6b65\uff0c\u4f46\u6709\u65f6\u5019\u9875\u9762\u60f3\u8981\u7684\u5143\u7d20\u65e9\u5c31\u5728\u52a0\u8f7d\u5b8c\u6210\u4e86\uff0c\u4f46\u662f\u56e0\u4e3a\u4e2a\u522bjs\u4e4b\u7c7b\u7684\u4e1c\u897f\u7279\u522b\u6162\uff0c\u6211\u4ecd\u5f97\u7b49\u5230\u9875\u9762\u5168\u90e8\u5b8c\u6210\u624d\u80fd\u6267\u884c\u4e0b\u4e00\u6b65\uff0c\u6211\u60f3\u7b49\u6211\u8981\u7684\u5143\u7d20\u51fa\u6765\u4e4b\u540e\u5c31\u4e0b\u4e00\u6b65\u600e\u4e48\u529e\uff1f\u6709\u529e\u6cd5\uff0c\u8fd9\u5c31\u8981\u770bselenium\u63d0\u4f9b\u7684\u53e6\u4e00\u79cd\u7b49\u5f85\u65b9\u5f0f\u2014\u2014\u663e\u6027\u7b49\u5f85wait\u4e86\u3002 \u7b2c\u4e09\u79cd\u529e\u6cd5\u5c31\u662f\u663e\u6027\u7b49\u5f85\uff0cWebDriverWait\uff0c\u914d\u5408\u8be5\u7c7b\u7684until()\u548cuntil_not()\u65b9\u6cd5\uff0c\u5c31\u80fd\u591f\u6839\u636e\u5224\u65ad\u6761\u4ef6\u800c\u8fdb\u884c\u7075\u6d3b\u5730\u7b49\u5f85\u4e86\u3002\u5b83\u4e3b\u8981\u7684\u610f\u601d\u5c31\u662f\uff1a\u7a0b\u5e8f\u6bcf\u9694xx\u79d2\u770b\u4e00\u773c\uff0c\u5982\u679c\u6761\u4ef6\u6210\u7acb\u4e86\uff0c\u5219\u6267\u884c\u4e0b\u4e00\u6b65\uff0c\u5426\u5219\u7ee7\u7eed\u7b49\u5f85\uff0c\u76f4\u5230\u8d85\u8fc7\u8bbe\u7f6e\u7684\u6700\u957f\u65f6\u95f4\uff0c\u7136\u540e\u629b\u51faTimeoutException\u3002<\/p>\n wait\u6a21\u5757\u7684WebDriverWait\u7c7b\u662f\u663e\u6027\u7b49\u5f85\u7c7b\uff0c\u5148\u770b\u4e0b\u5b83\u6709\u54ea\u4e9b\u53c2\u6570\u4e0e\u65b9\u6cd5\uff1a<\/p>\n init<\/strong><\/p>\n driver: \u4f20\u5165WebDriver\u5b9e\u4f8b\uff0c\u5373\u6211\u4eec\u4e0a\u4f8b\u4e2d\u7684driver<\/span> until<\/strong><\/p>\n method: \u5728\u7b49\u5f85\u671f\u95f4\uff0c\u6bcf\u9694\u4e00\u6bb5\u65f6\u95f4\uff08__init__\u4e2d\u7684poll_frequency\uff09\u8c03\u7528\u8fd9\u4e2a\u4f20\u5165\u7684\u65b9\u6cd5\uff0c\u76f4\u5230\u8fd4\u56de\u503c\u4e0d\u662fFalse until_not<\/strong><\/p>\n \u770b\u4e86\u4ee5\u4e0a\u5185\u5bb9\u57fa\u672c\u4e0a\u5f88\u6e05\u695a\u4e86\uff0c\u8c03\u7528\u65b9\u6cd5\u5982\u4e0b\uff1a<\/p>\n WebDriverWait(driver, \u8d85\u65f6\u65f6\u957f, \u8c03\u7528\u9891\u7387, \u5ffd\u7565\u5f02\u5e38).until(\u53ef\u6267\u884c\u65b9\u6cd5, \u8d85\u65f6\u65f6\u8fd4\u56de\u7684\u4fe1\u606f)<\/p>\n \u8fd9\u91cc\u9700\u8981\u7279\u522b\u6ce8\u610f\u7684\u662funtil\u6216until_not\u4e2d\u7684\u53ef\u6267\u884c\u65b9\u6cd5method\u53c2\u6570\uff0c\u5f88\u591a\u4eba\u4f20\u5165\u4e86WebElement\u5bf9\u8c61\uff0c\u5982\u4e0b\uff1a<\/p>\n WebDriverWait(driver, 10).until(driver.find_element_by_id('kw')) # \u9519\u8bef<\/p>\n \u8fd9\u662f\u9519\u8bef\u7684\u7528\u6cd5\uff0c\u8fd9\u91cc\u7684\u53c2\u6570\u4e00\u5b9a\u8981\u662f\u53ef\u4ee5\u8c03\u7528\u7684\uff0c\u5373\u8fd9\u4e2a\u5bf9\u8c61\u4e00\u5b9a\u6709 call<\/strong>() \u65b9\u6cd5\uff0c\u5426\u5219\u4f1a\u629b\u51fa\u5f02\u5e38\uff1a<\/p>\n TypeError: 'xxx' object is not callable<\/p>\n \u5728\u8fd9\u91cc\uff0c\u4f60\u53ef\u4ee5\u7528selenium\u63d0\u4f9b\u7684 expected_conditions<\/strong> \u6a21\u5757\u4e2d\u7684\u5404\u79cd\u6761\u4ef6\uff0c\u4e5f\u53ef\u4ee5\u7528WebElement\u7684 is_displayed()<\/strong> \u3001is_enabled()<\/strong>\u3001**is_selected() **\u65b9\u6cd5\uff0c\u6216\u8005\u7528\u81ea\u5df1\u5c01\u88c5\u7684\u65b9\u6cd5\u90fd\u53ef\u4ee5\u3002<\/p>\n \u4e00\u822c\u6765\u8bf4\uff0cwebdriver \u4e2d\u6bd4\u8f83\u5e38\u7528\u7684\u64cd\u4f5c\u5bf9\u8c61\u7684\u65b9\u6cd5\u6709\u4e0b\u9762\u51e0\u4e2a\uff1a<\/p>\n click\u2014\u2014\u70b9\u51fb\u5bf9\u8c61<\/span> \u8981\u60f3\u8c03\u7528\u952e\u76d8\u6309\u952e\u64cd\u4f5c\u9700\u8981\u5f15\u5165 keys \u5305\uff1a<\/p>\n \u53c2\u8003\u4ee3\u7801\uff1a<\/p>\n \u952e\u76d8\u7ec4\u5408\u952e\u7684\u7528\u6cd5\uff1a<\/p>\n \u9f20\u6807\u4e8b\u4ef6\u4e00\u822c\u5305\u62ec\u9f20\u6807\u53f3\u952e\u3001\u53cc\u51fb\u3001\u62d6\u52a8\u3001\u79fb\u52a8\u9f20\u6807\u5230\u67d0\u4e2a\u5143\u7d20\u4e0a\u7b49\u7b49\u3002 ActionChains \u5e38\u7528\u65b9\u6cd5\uff1a<\/p>\n perform() \u6267\u884c\u6240\u6709ActionChains \u4e2d\u5b58\u50a8\u7684\u884c\u4e3a\uff1b<\/span> \u9f20\u6807\u53cc\u51fb\u793a\u4f8b\uff1a<\/p>\n \u9f20\u6807\u62d6\u653e\u793a\u4f8b\uff1a<\/p>\n \u5b9a\u4f4d\u5143\u7d20\u8fc7\u7a0b\u4e2d\u7ecf\u5e38\u4f1a\u9047\u5230\u627e\u4e0d\u5230\u5143\u7d20\u7684\u95ee\u9898\uff0c\u51fa\u73b0\u8be5\u95ee\u9898\u4e00\u822c\u90fd\u662f\u4ee5\u4e0b\u56e0\u7d20\u5bfc\u81f4\uff1a<\/p>\n \u5143\u7d20\u5b9a\u4f4d\u65b9\u6cd5\u4e0d\u5bf9<\/span> webdriver \u63d0\u4f9b\u4e86\u4e00\u4e2a switch_to_frame \u65b9\u6cd5\uff0c\u53ef\u4ee5\u5f88\u8f7b\u677e\u7684\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002 \u540c\u6837\u7684\uff0c\u5982\u679c\u662f\u5185\u5d4c\u7a97\u53e3\uff1a Expected Conditions\u7684\u4f7f\u7528\u573a\u666f\u67092\u79cd\uff1a<\/p>\n \u76f4\u63a5\u5728\u65ad\u8a00\u4e2d\u4f7f\u7528<\/span> \u76f8\u5173\u65b9\u6cd5\uff1a<\/p>\n title_is: \u5224\u65ad\u5f53\u524d\u9875\u9762\u7684title\u662f\u5426\u7cbe\u786e\u7b49\u4e8e\u9884\u671f<\/span> \u793a\u4f8b\uff1a<\/strong> \u9996\u5148\u5bfc\u5165expected_conditions\u6a21\u5757<\/span> webdriver\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u53ef\u80fd\u4f1a\u51fa\u73b0\u5404\u79cd\u5f02\u5e38\uff0c\u6211\u4eec\u9700\u8981\u4e86\u89e3\u8be5\u5f02\u5e38\u5e76\u77e5\u9053\u5982\u4f55\u8fdb\u884c\u5f02\u5e38\u5904\u7406\u3002<\/p>\n \u8fd9\u91cc\u4ecb\u7ecd\u4e00\u6b3e\u5728\u7ebf\u4ee3\u7801\u7f8e\u5316\u5de5\u5177\uff0c\u5728\u7ebf\u8bbf\u95ee\u5730\u5740\uff1a \u53e6\u5916\u5982\u679c\u4f7f\u7528Vscode\u7684\u8bdd\uff0c\u53ef\u4ee5\u5b89\u88c5\u5bf9\u5e94\u7684\u63d2\u4ef6\u8fdb\u884c\u5feb\u901f\u5728\u7ebf\u7f8e\u5316\u3002<\/p>\n \u6253\u5f00Vscode,\u5728\u63d2\u4ef6\u680f\u8f93\u5165\uff1acarbon-now-sh<\/span>Selenium\u7b80\u4ecb<\/h2>\n
Selenium\u73af\u5883\u642d\u5efa\u53ca\u914d\u7f6e<\/h2>\n
\u5143\u7d20\u5b9a\u4f4d\u53ca\u6d4f\u89c8\u5668\u57fa\u672c\u64cd\u4f5c<\/h2>\n
from selenium import webdriver \n
browser = webdriver.Chrome() \n
browser.get('https:\/\/www.lidihuo.com\/')<\/code><\/pre>\n<\/p><\/div>\nfrom selenium import webdriver \n
browser = webdriver.Firefox() \n
browser.get('https:\/\/www.lidihuo.com\/')<\/code><\/pre>\n<\/p><\/div>\nfrom selenium import webdriver \n
browser = webdriver.Ie() \n
browser.get('https:\/\/www.lidihuo.com\/')<\/code><\/pre>\n<\/p><\/div>\n
\u5b98\u65b9\u6587\u6863\u4e2d\u4ecb\u7ecd\uff0cmac\u548clinux\u73af\u5883\u8981\u6c42chrome\u7248\u672c\u662f59+\uff0c\u800cwindows\u7248\u672c\u7684chrome\u8981\u6c42\u662f60+\uff0c\u540c\u65f6chromedriver\u8981\u6c422.30+\u7248\u672c\u3002<\/p>\nfrom selenium import webdriver \n
from selenium.webdriver.common.by import By \n
from selenium.webdriver.support.ui import WebDriverWait \n
from selenium.webdriver.support import expected_conditions as EC \n
from selenium.webdriver.common.action_chains import ActionChains \n
from selenium.webdriver.common.keys import Keys \n
chrome_options = webdriver.ChromeOptions() \n
\n# \u4f7f\u7528headless\u65e0\u754c\u9762\u6d4f\u89c8\u5668\u6a21\u5f0f<\/span> \n
chrome_options.add_argument('--headless') \n
chrome_options.add_argument('--disable-gpu') \n
\n# \u542f\u52a8\u6d4f\u89c8\u5668\uff0c\u83b7\u53d6\u7f51\u9875\u6e90\u4ee3\u7801<\/span> \n
browser = webdriver.Chrome(chrome_options=chrome_options) \n
mainUrl = \"https:\/\/www.lidihuo.com\/\" \n
browser.get(mainUrl) \n
print(f\"browser text = {browser.page_source}\") \n
browser.quit()<\/code><\/pre>\n<\/p><\/div>\n# coding=utf-8<\/span> \n
from selenium import webdriver \n
option = webdriver.ChromeOptions() \n
\n# \u8bbe\u7f6e\u6210\u7528\u6237\u81ea\u5df1\u7684\u6570\u636e\u76ee\u5f55<\/span> \n
option.add_argument('--user-data-dir=C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\User Data') \n
driver=webdriver.Chrome(chrome_options=option)<\/code><\/pre>\n<\/p><\/div>\n# coding=utf-8<\/span> \n
from selenium import webdriver \n
\n# \u914d\u7f6e\u6587\u4ef6\u5730\u5740<\/span> \n
profile_directory = r'C:\\Users\\xxx\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\1x41j9of.default' \n
\n# \u52a0\u8f7d\u914d\u7f6e\u914d\u7f6e<\/span> \n
profile = webdriver.FirefoxProfile(profile_directory) \n
\n# \u542f\u52a8\u6d4f\u89c8\u5668\u914d\u7f6e<\/span> \n
driver = webdriver.Firefox(profile)<\/code><\/pre>\n<\/p><\/div>\n
\n\u5143\u7d20\u5b9a\u4f4d<\/h3>\n
\n name\u5b9a\u4f4d\uff1afind_element_by_name()<\/span>
\n class\u5b9a\u4f4d\uff1afind_element_by_class_name()<\/span>
\n link\u5b9a\u4f4d\uff1afind_element_by_link_text()<\/span>
\n partial link\u5b9a\u4f4d\uff1afind_element_by_partial_link_text()<\/span>
\n tag\u5b9a\u4f4d\uff1afind_element_by_tag_name()<\/span>
\n xpath\u5b9a\u4f4d\uff1afind_element_by_xpath()<\/span>
\n css\u5b9a\u4f4d\uff1afind_element_by_css_selector()<\/span> <\/p>\n# coding=utf-8<\/span> \n
from selenium import webdriver \n
browser=webdriver.Firefox() \n
browser.get(\"http:\/\/www.baidu.com\") \n
\n#########\u767e\u5ea6\u8f93\u5165\u6846\u7684\u5b9a\u4f4d\u65b9\u5f0f##########<\/span> \n
\n# \u901a\u8fc7id\u65b9\u5f0f\u5b9a\u4f4d<\/span> \n
browser.find_element_by_id(\"kw\").send_keys(\"selenium\") \n
#\u901a\u8fc7name\u65b9\u5f0f\u5b9a\u4f4d \n
browser.find_element_by_name(\"wd\").send_keys(\"selenium\") \n
\n# \u901a\u8fc7tag name\u65b9\u5f0f\u5b9a\u4f4d<\/span> \n
browser.find_element_by_tag_name(\"input\").send_keys(\"selenium\") \n
\n#\u901a\u8fc7class name\u65b9\u5f0f\u5b9a\u4f4d<\/span> \n
browser.find_element_by_class_name(\"s_ipt\").send_keys(\"selenium\") \n
\n# \u901a\u8fc7CSS\u65b9\u5f0f\u5b9a\u4f4d<\/span> \n
browser.find_element_by_css_selector(\"#kw\").send_keys(\"selenium\") \n
\n# \u901a\u8fc7xpath\u65b9\u5f0f\u5b9a\u4f4d<\/span> \n
browser.find_element_by_xpath(\"\/\/input[@id='kw']\").send_keys(\"selenium\") \n
\n############################################<\/span> \n
browser.find_element_by_id(\"su\").click() \n
time.sleep(3) \n
browser.quit()<\/code><\/pre>\n<\/p><\/div>\n
\n \u82e5\u7a7a\u683c\u9694\u5f00\u7684class\u4e0d\u552f\u4e00\u53ef\u4ee5\u901a\u8fc7\u7d22\u5f15\u8fdb\u884c\u5b9a\u4f4d self.driver.find_elements_by_class_name('table-dragColumn')[0].click()<\/span>
\n \u901a\u8fc7css\u65b9\u6cd5\u8fdb\u884c\u5b9a\u4f4d\uff08\u7a7a\u683c\u4ee5\u2018.\u2019\u4ee3\u66ff\uff09<\/span> <\/p>\n# \u524d\u9762\u52a0\uff08.\uff09\u7a7a\u683c\u5730\u65b9\u7528\u70b9\uff08.\uff09\u6765\u4ee3\u66ff<\/span> \n
self.driver.find_element_by_css_selector('.dtb-style-1.table-dragColumns').click() \n
\n# \u5305\u542b\u6574\u4e2a\u7c7b<\/span> \n
self.driver.find_element_by_css_selector('class=\"dtb-style-1 table-dragColumns').click()<\/code><\/pre>\n<\/p><\/div>\n# coding:utf-8<\/span> \n
from selenium import webdriver \n
driver = webdriver.Firefox() \n
driver.get(\"http:\/\/xxx.com\/\") \n
driver.implicitly_wait(20) \n
driver.switch_to.frame(\"x-URS-iframe\") \n
\n# \u65b9\u6cd5\u4e00\uff1a\u53d6\u5355\u4e2aclass\u5c5e\u6027<\/span> \n
driver.find_element_by_class_name(\"classname\").send_keys(\"keyname\") \n
\n# \u65b9\u6cd5\u4e8c\uff1a\u5b9a\u4f4d\u4e00\u7ec4\u53d6\u4e0b\u6807\u5b9a\u4f4d\uff08\u4e43\u4e0b\u7b56\uff09<\/span> \n
driver.find_elements_by_class_name(\"tagname\")[0].send_keys(\"keyname\") \n
\n# \u65b9\u6cd5\u4e09\uff1acss\u5b9a\u4f4d<\/span> \n
driver.find_element_by_css_selector(\".classname1 .classname2\").send_keys(\"keyname\") \n
\n# \u65b9\u6cd5\u56db\uff1a\u53d6\u5355\u4e2aclass\u5c5e\u6027\u4e5f\u662f\u53ef\u4ee5\u7684<\/span> \n
driver.find_element_by_css_selector(\".classname\").send_keys(\"keyname\") \n
\n# \u65b9\u6cd5\u4e94\uff1a\u76f4\u63a5\u5305\u542b\u7a7a\u683c\u7684CSS\u5c5e\u6027\u5b9a\u4f4d\u5927\u6cd5<\/span> \n
driver.find_element_by_css_selector(\"[class='classname1 classname2']\").send_keys(\"yoyo\") \n
<\/code><\/pre>\n<\/p><\/div>\n
\nselenium\u4e09\u79cd\u7b49\u5f85\u65b9\u5f0f<\/h3>\n
# -*- coding: utf-8 -*-<\/span> \n
from selenium import webdriver \n
import time \n
driver = webdriver.Firefox() \n
driver.get('http:\/\/baidu.com') \n
time.sleep(3) # \u5f3a\u5236\u7b49\u5f853\u79d2\u518d\u6267\u884c\u4e0b\u4e00\u6b65 \n
print(driver.current_url) \n
driver.quit()<\/code><\/pre>\n<\/p><\/div>\n# -*- coding: utf-8 -*-<\/span> \n
from selenium import webdriver \n
driver = webdriver.Firefox() \n
driver.implicitly_wait(30) # \u9690\u6027\u7b49\u5f85\uff0c\u6700\u957f\u7b4930\u79d2 \n
driver.get('http:\/\/baidu.com') \n
print(driver.current_url) \n
driver.quit()<\/code><\/pre>\n<\/p><\/div>\n
\u9700\u8981\u7279\u522b\u8bf4\u660e\u7684\u662f\uff1a\u9690\u6027\u7b49\u5f85\u5bf9\u6574\u4e2adriver\u7684\u5468\u671f\u90fd\u8d77\u4f5c\u7528\uff0c\u6240\u4ee5\u53ea\u8981\u8bbe\u7f6e\u4e00\u6b21\u5373\u53ef\uff0c\u6211\u66fe\u770b\u5230\u6709\u4eba\u628a\u9690\u6027\u7b49\u5f85\u5f53\u6210\u4e86sleep\u5728\u7528\uff0c\u8d70\u54ea\u513f\u90fd\u6765\u4e00\u4e0b\u2026<\/strong><\/p>\n
\n
\n timeout: \u8d85\u65f6\u65f6\u95f4\uff0c\u7b49\u5f85\u7684\u6700\u957f\u65f6\u95f4\uff08\u540c\u65f6\u8981\u8003\u8651\u9690\u6027\u7b49\u5f85\u65f6\u95f4\uff09
<\/span>
\n poll_frequency: \u8c03\u7528until\u6216until_not\u4e2d\u7684\u65b9\u6cd5\u7684\u95f4\u9694\u65f6\u95f4\uff0c\u9ed8\u8ba4\u662f0.5\u79d2
<\/span>
\n ignored_exceptions: \u5ffd\u7565\u7684\u5f02\u5e38\uff0c\u5982\u679c\u5728\u8c03\u7528until\u6216until_not\u7684\u8fc7\u7a0b\u4e2d\u629b\u51fa\u8fd9\u4e2a\u5143\u7ec4\u4e2d\u7684\u5f02\u5e38\uff0c\u5219\u4e0d\u4e2d\u65ad\u4ee3\u7801\uff0c\u7ee7\u7eed\u7b49\u5f85\uff0c\u5982\u679c\u629b\u51fa\u7684\u662f\u8fd9\u4e2a\u5143\u7ec4\u5916\u7684\u5f02\u5e38\uff0c\u5219\u4e2d\u65ad\u4ee3\u7801\uff0c\u629b\u51fa\u5f02\u5e38\u3002\u9ed8\u8ba4\u53ea\u6709NoSuchElementException\u3002<\/span> <\/p>\n
<\/span>
\n message: \u5982\u679c\u8d85\u65f6\uff0c\u629b\u51faTimeoutException\uff0c\u5c06message\u4f20\u5165\u5f02\u5e38\u3002<\/span> <\/p>\n# coding=utf-8
<\/span> from selenium import webdriver \n
from selenium.webdriver.common.by import By \n
from selenium.webdriver.support import expected_conditions as EC \n
from selenium.webdriver.support.wait import WebDriverWait \n
base_url = \"http:\/\/www.baidu.com\" \n
driver = webdriver.Firefox() \n
driver.implicitly_wait(5) \n
\n'''\u9690\u5f0f\u7b49\u5f85\u548c\u663e\u793a\u7b49\u5f85\u90fd\u5b58\u5728\u65f6\uff0c\u8d85\u65f6\u65f6\u95f4\u53d6\u4e8c\u8005\u4e2d\u8f83\u5927\u7684'''<\/span> \n
locator = (By.ID,'kw') \n
driver.get(base_url) \n
WebDriverWait(driver,10).until(EC.title_is(u\"\u767e\u5ea6\u4e00\u4e0b\uff0c\u4f60\u5c31\u77e5\u9053\")) \n
\n'''\u5224\u65adtitle,\u8fd4\u56de\u5e03\u5c14\u503c'''<\/span> \n
WebDriverWait(driver,10).until(EC.title_contains(u\"\u767e\u5ea6\u4e00\u4e0b\")) \n
\n'''\u5224\u65adtitle\uff0c\u8fd4\u56de\u5e03\u5c14\u503c'''<\/span> \n
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw'))) \n
\n'''\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u662f\u5426\u88ab\u52a0\u5230\u4e86dom\u6811\u91cc\uff0c\u5e76\u4e0d\u4ee3\u8868\u8be5\u5143\u7d20\u4e00\u5b9a\u53ef\u89c1\uff0c\u5982\u679c\u5b9a\u4f4d\u5230\u5c31\u8fd4\u56deWebElement'''<\/span> \n
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su'))) \n
\n'''\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u662f\u5426\u88ab\u6dfb\u52a0\u5230\u4e86dom\u91cc\u5e76\u4e14\u53ef\u89c1\uff0c\u53ef\u89c1\u4ee3\u8868\u5143\u7d20\u53ef\u663e\u793a\u4e14\u5bbd\u548c\u9ad8\u90fd\u5927\u4e8e0'''<\/span> \n
WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw'))) \n
\n'''\u5224\u65ad\u5143\u7d20\u662f\u5426\u53ef\u89c1\uff0c\u5982\u679c\u53ef\u89c1\u5c31\u8fd4\u56de\u8fd9\u4e2a\u5143\u7d20'''<\/span> \n
WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav'))) \n
\n'''\u5224\u65ad\u662f\u5426\u81f3\u5c11\u67091\u4e2a\u5143\u7d20\u5b58\u5728\u4e8edom\u6811\u4e2d\uff0c\u5982\u679c\u5b9a\u4f4d\u5230\u5c31\u8fd4\u56de\u5217\u8868'''<\/span> \n
WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'.mnav'))) \n
\n'''\u5224\u65ad\u662f\u5426\u81f3\u5c11\u6709\u4e00\u4e2a\u5143\u7d20\u5728\u9875\u9762\u4e2d\u53ef\u89c1\uff0c\u5982\u679c\u5b9a\u4f4d\u5230\u5c31\u8fd4\u56de\u5217\u8868'''<\/span> \n
WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,\"\/\/*[@id='u1']\/a[8]\"),u'\u8bbe\u7f6e')) \n
\n'''\u5224\u65ad\u6307\u5b9a\u7684\u5143\u7d20\u4e2d\u662f\u5426\u5305\u542b\u4e86\u9884\u671f\u7684\u5b57\u7b26\u4e32\uff0c\u8fd4\u56de\u5e03\u5c14\u503c'''<\/span> \n
WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'\u767e\u5ea6\u4e00\u4e0b')) \n
\n'''\u5224\u65ad\u6307\u5b9a\u5143\u7d20\u7684\u5c5e\u6027\u503c\u4e2d\u662f\u5426\u5305\u542b\u4e86\u9884\u671f\u7684\u5b57\u7b26\u4e32\uff0c\u8fd4\u56de\u5e03\u5c14\u503c'''<\/span> \n
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(locator)) \n
\n'''\u5224\u65ad\u8be5frame\u662f\u5426\u53ef\u4ee5switch\u8fdb\u53bb\uff0c\u5982\u679c\u53ef\u4ee5\u7684\u8bdd\uff0c\u8fd4\u56deTrue\u5e76\u4e14switch\u8fdb\u53bb\uff0c\u5426\u5219\u8fd4\u56deFalse'''<\/span> \n
\n# \u6ce8\u610f\u8fd9\u91cc\u5e76\u6ca1\u6709\u4e00\u4e2aframe\u53ef\u4ee5\u5207\u6362\u8fdb\u53bb
<\/span> WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap'))) \n
\n'''\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u5728\u662f\u5426\u5b58\u5728\u4e8edom\u6216\u4e0d\u53ef\u89c1,\u5982\u679c\u53ef\u89c1\u8fd4\u56deFalse,\u4e0d\u53ef\u89c1\u8fd4\u56de\u8fd9\u4e2a\u5143\u7d20'''
<\/span> \n# \u6ce8\u610f#swfEveryCookieWrap\u5728\u6b64\u9875\u9762\u4e2d\u662f\u4e00\u4e2a\u9690\u85cf\u7684\u5143\u7d20
<\/span> WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,\"\/\/*[@id='u1']\/a[8]\"))).click() \n
\n'''\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u4e2d\u662f\u5426\u53ef\u89c1\u5e76\u4e14\u662fenable\u7684\uff0c\u4ee3\u8868\u53ef\u70b9\u51fb'''
<\/span> driver.find_element_by_xpath(\"\/\/*[@id='wrapper']\/div[6]\/a[1]\").click() \n
\n# WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,\"\/\/*[@id='wrapper']\/div[6]\/a[1]\"))).click()
<\/span> # WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,'su'))) \n
\n'''\u7b49\u5f85\u67d0\u4e2a\u5143\u7d20\u4ecedom\u6811\u4e2d\u79fb\u9664'''
<\/span> \n# \u8fd9\u91cc\u6ca1\u6709\u627e\u5230\u5408\u9002\u7684\u4f8b\u5b50
<\/span> WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,\"\/\/*[@id='nr']\/option[1]\"))) \n
\n'''\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u662f\u5426\u88ab\u9009\u4e2d\u4e86,\u4e00\u822c\u7528\u5728\u4e0b\u62c9\u5217\u8868'''
<\/span> WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,\"\/\/*[@id='nr']\/option[1]\"),True)) \n
\n'''\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u7684\u9009\u4e2d\u72b6\u6001\u662f\u5426\u7b26\u5408\u9884\u671f'''
<\/span> WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,\"\/\/*[@id='nr']\/option[1]\"),True)) \n
\n'''\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u7684\u9009\u4e2d\u72b6\u6001\u662f\u5426\u7b26\u5408\u9884\u671f'''
<\/span> driver.find_element_by_xpath(\".\/\/*[@id='gxszButton']\/a[1]\").click() \n
instance = WebDriverWait(driver,10).until(EC.alert_is_present()) \n
\n'''\u5224\u65ad\u9875\u9762\u4e0a\u662f\u5426\u5b58\u5728alert,\u5982\u679c\u6709\u5c31\u5207\u6362\u5230alert\u5e76\u8fd4\u56dealert\u7684\u5185\u5bb9'''
<\/span> print instance.text \n
instance.accept() \n
driver.close()<\/code><\/pre>\n<\/p><\/div>\n\u6d4f\u89c8\u5668\u64cd\u4f5c<\/h3>\n
browser.maximize_window()<\/code><\/pre>\n<\/p><\/div>\n
browser.minimize_window()<\/code><\/pre>\n<\/p><\/div>\n
browser.set_window_size(480, 800)<\/code><\/pre>\n<\/p><\/div>\n
browser.forword()<\/code><\/pre>\n<\/p><\/div>\n
browser.back()<\/code><\/pre>\n<\/p><\/div>\n
\n\u64cd\u4f5c\u6d4b\u8bd5\u5bf9\u8c61<\/h3>\n
\n send_keys\u2014\u2014\u5728\u5bf9\u8c61\u4e0a\u6a21\u62df\u6309\u952e\u8f93\u5165<\/span>
\n clear\u2014\u2014\u6e05\u9664\u5bf9\u8c61\u7684\u5185\u5bb9\uff0c\u5982\u679c\u53ef\u4ee5\u7684\u8bdd<\/span>
\n submit\u2014\u2014\u63d0\u4ea4\u5bf9\u8c61\u7684\u5185\u5bb9\uff0c\u5982\u679c\u53ef\u4ee5\u7684\u8bdd<\/span>
\n text\u2014\u2014\u7528\u4e8e\u83b7\u53d6\u5143\u7d20\u7684\u6587\u672c\u4fe1\u606f<\/span> <\/p>\n\u952e\u76d8\u4e8b\u4ef6<\/h3>\n
from selenium.webdriver.common.keys import Keys\u901a\u8fc7 send_keys()\u8c03\u7528\u6309\u952e\uff1a \n
send_keys(Keys.TAB) # TAB \n
send_keys(Keys.ENTER) # \u56de\u8f66<\/code><\/pre>\n<\/p><\/div>\n# coding=utf-8
<\/span> from selenium import webdriver \n
from selenium.webdriver.common.keys import Keys #\u9700\u8981\u5f15\u5165 keys \u5305 \n
import os,time \n
driver = webdriver.Firefox() \n
driver.get(\"http:\/\/xxxx.com\") \n
time.sleep(3) \n
driver.maximize_window() # \u6d4f\u89c8\u5668\u5168\u5c4f\u663e\u793a \n
driver.find_element_by_id(\"user_name\").clear() \n
driver.find_element_by_id(\"user_name\").send_keys(\"fnngj\") \n
\n# tab \u7684\u5b9a\u4f4d\u76f8\u76f8\u4e8e\u6e05\u9664\u4e86\u5bc6\u7801\u6846\u7684\u9ed8\u8ba4\u63d0\u793a\u4fe1\u606f\uff0c\u7b49\u540c\u4e0a\u9762\u7684 clear()
<\/span> driver.find_element_by_id(\"user_name\").send_keys(Keys.TAB) \n
time.sleep(3) \n
driver.find_element_by_id(\"user_pwd\").send_keys(\"123456\") \n
\n# \u901a\u8fc7\u5b9a\u4f4d\u5bc6\u7801\u6846\uff0center\uff08\u56de\u8f66\uff09\u6765\u4ee3\u66ff\u767b\u9646\u6309\u94ae
<\/span> driver.find_element_by_id(\"user_pwd\").send_keys(Keys.ENTER) \n
\n# \u4e5f\u53ef\u5b9a\u4f4d\u767b\u9646\u6309\u94ae\uff0c\u901a\u8fc7 enter\uff08\u56de\u8f66\uff09\u4ee3\u66ff click()
<\/span> driver.find_element_by_id(\"login\").send_keys(Keys.ENTER) \n
time.sleep(3) \n
driver.quit()<\/code><\/pre>\n<\/p><\/div>\n# ctrl+a \u5168\u9009\u8f93\u5165\u6846\u5185\u5bb9<\/span> \n
driver.find_element_by_id(\"kw\").send_keys(Keys.CONTROL,'a')<\/code><\/pre>\n<\/p><\/div>\n# ctrl+x \u526a\u5207\u8f93\u5165\u6846\u5185\u5bb9<\/span> \n
driver.find_element_by_id(\"kw\").send_keys(Keys.CONTROL,'x')<\/code><\/pre>\n<\/p><\/div>\n
\n\u9f20\u6807\u4e8b\u4ef6<\/h3>\n
\u9700\u8981\u5f15\u5165ActionChains\u7c7b\u3002
\u5f15\u5165\u65b9\u6cd5\uff1a<\/p>\nfrom selenium.webdriver.common.action_chains import ActionChains<\/code><\/pre>\n<\/p><\/div>\n
\n context_click() \u53f3\u51fb\uff1b<\/span>
\n double_click() \u53cc\u51fb\uff1b<\/span>
\n drag_and_drop() \u62d6\u52a8\uff1b<\/span>
\n move_to_element() \u9f20\u6807\u60ac\u505c\u3002<\/span> <\/p>\n# \u5b9a\u4f4d\u5230\u8981\u53cc\u51fb\u7684\u5143\u7d20<\/span> \n
qqq =driver.find_element_by_xpath(\"xxx\") \n
\n# \u5bf9\u5b9a\u4f4d\u5230\u7684\u5143\u7d20\u6267\u884c\u9f20\u6807\u53cc\u51fb\u64cd\u4f5c<\/span> \n
ActionChains(driver).double_click(qqq).perform()<\/code><\/pre>\n<\/p><\/div>\n# \u5b9a\u4f4d\u5143\u7d20\u7684\u539f\u4f4d\u7f6e<\/span> \n
element = driver.find_element_by_name(\"source\") \n
\n# \u5b9a\u4f4d\u5143\u7d20\u8981\u79fb\u52a8\u5230\u7684\u76ee\u6807\u4f4d\u7f6e<\/span> \n
target = driver.find_element_by_name(\"target\") \n
\n# \u6267\u884c\u5143\u7d20\u7684\u79fb\u52a8\u64cd\u4f5c
<\/span> ActionChains(driver).drag_and_drop(element, target).perform()<\/code><\/pre>\n<\/p><\/div>\n
\n\u591a\u5c42\u6846\u67b6\/\u5c42\u7ea7\u5b9a\u4f4d<\/h3>\n
\n \u9875\u9762\u5b58\u5728iframe\u6216\u5185\u5d4c\u7a97\u53e3<\/span>
\n \u9875\u9762\u8d85\u65f6<\/span> <\/p>\n
\u7528\u6cd5\uff1a<\/p>\n# \u5148\u627e\u5230\u5230 ifrome1\uff08id = f1\uff09
<\/span> browser.switch_to_frame(\"f1\")<\/code><\/pre>\n<\/p><\/div>\n
browser.switch_to_window(\"f1\")<\/p>\n
\nExpected Conditions\u89e3\u6790<\/h3>\n
\n \u4e0eWebDriverWait\u914d\u5408\u4f7f\u7528\uff0c\u52a8\u6001\u7b49\u5f85\u9875\u9762\u4e0a\u5143\u7d20\u51fa\u73b0\u6216\u8005\u6d88\u5931<\/span> <\/p>\n
\n title_contains\uff1a \u5224\u65ad\u5f53\u524d\u9875\u9762\u7684title\u662f\u5426\u5305\u542b\u9884\u671f\u5b57\u7b26\u4e32<\/span>
\n presence_of_element_located\uff1a\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u662f\u5426\u88ab\u52a0\u5230\u4e86dom\u6811\u91cc\uff0c\u5e76\u4e0d\u4ee3\u8868\u8be5\u5143\u7d20\u4e00\u5b9a\u53ef\u89c1<\/span>
\n visibility_of_element_located\uff1a\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u662f\u5426\u53ef\u89c1.\u53ef\u89c1\u4ee3\u8868\u5143\u7d20\u975e\u9690\u85cf\uff0c\u5e76\u4e14\u5143\u7d20\u7684\u5bbd\u548c\u9ad8\u90fd\u4e0d\u7b49\u4e8e0<\/span>
\n visibility_of\uff1a\u8ddf\u4e0a\u9762\u7684\u65b9\u6cd5\u505a\u4e00\u6837\u7684\u4e8b\u60c5\uff0c\u53ea\u662f\u4e0a\u9762\u7684\u65b9\u6cd5\u8981\u4f20\u5165locator\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u76f4\u63a5\u4f20\u5b9a\u4f4d\u5230\u7684element\u5c31\u597d\u4e86<\/span>
\n presence_of_all_elements_located\uff1a\u5224\u65ad\u662f\u5426\u81f3\u5c11\u67091\u4e2a\u5143\u7d20\u5b58\u5728\u4e8edom\u6811\u4e2d\u3002\u4e3e\u4e2a\u4f8b\u5b50\uff0c\u5982\u679c\u9875\u9762\u4e0a\u6709n\u4e2a\u5143\u7d20\u7684class\u90fd\u662f'column-md-3'\uff0c\u90a3\u4e48\u53ea\u8981\u67091\u4e2a\u5143\u7d20\u5b58\u5728\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u5c31\u8fd4\u56deTrue<\/span>
\n text_to_be_present_in_element\uff1a\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u4e2d\u7684text\u662f\u5426\u5305\u542b\u4e86\u9884\u671f\u7684\u5b57\u7b26\u4e32<\/span>
\n text_to_be_present_in_element_value\uff1a\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u4e2d\u7684value\u5c5e\u6027\u662f\u5426\u5305\u542b\u4e86\u9884\u671f\u7684\u5b57\u7b26\u4e32<\/span>
\n frame_to_be_available_and_switch_to_it\uff1a\u5224\u65ad\u8be5frame\u662f\u5426\u53ef\u4ee5switch\u8fdb\u53bb\uff0c\u5982\u679c\u53ef\u4ee5\u7684\u8bdd\uff0c\u8fd4\u56deTrue\u5e76\u4e14switch\u8fdb\u53bb\uff0c\u5426\u5219\u8fd4\u56deFalse<\/span>
\n invisibility_of_element_located\uff1a\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u4e2d\u662f\u5426\u4e0d\u5b58\u5728\u4e8edom\u6811\u6216\u4e0d\u53ef\u89c1<\/span>
\n element_to_be_clickable\uff1a\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u4e2d\u662f\u5426\u53ef\u89c1\u5e76\u4e14\u662fenable\u7684\uff0c\u8fd9\u6837\u7684\u8bdd\u624d\u53ebclickable<\/span>
\n staleness_of\uff1a\u7b49\u67d0\u4e2a\u5143\u7d20\u4ecedom\u6811\u4e2d\u79fb\u9664\uff0c\u6ce8\u610f\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u4e5f\u662f\u8fd4\u56deTrue\u6216False<\/span>
\n element_to_be_selected\uff1a\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u662f\u5426\u88ab\u9009\u4e2d\u4e86,\u4e00\u822c\u7528\u5728\u4e0b\u62c9\u5217\u8868<\/span>
\n element_selection_state_to_be\uff1a\u5224\u65ad\u67d0\u4e2a\u5143\u7d20\u7684\u9009\u4e2d\u72b6\u6001\u662f\u5426\u7b26\u5408\u9884\u671f<\/span>
\n element_located_selection_state_to_be\uff1a\u8ddf\u4e0a\u9762\u7684\u65b9\u6cd5\u4f5c\u7528\u4e00\u6837\uff0c\u53ea\u662f\u4e0a\u9762\u7684\u65b9\u6cd5\u4f20\u5165\u5b9a\u4f4d\u5230\u7684element\uff0c\u800c\u8fd9\u4e2a\u65b9\u6cd5\u4f20\u5165locator<\/span>
\n alert_is_present\uff1a\u5224\u65ad\u9875\u9762\u4e0a\u662f\u5426\u5b58\u5728alert\uff0c\u8fd9\u662f\u4e2a\u8001\u95ee\u9898\uff0c\u5f88\u591a\u540c\u5b66\u4f1a\u95ee\u5230<\/span> <\/p>\n
\u5224\u65adtitle\uff1atitle_is()\u3001title_contains()<\/strong><\/p>\n
\n \u7531\u4e8e\u8fd9\u4e2a\u6a21\u5757\u540d\u79f0\u6bd4\u8f83\u957f\uff0c\u6240\u4ee5\u4e3a\u4e86\u540e\u7eed\u7684\u8c03\u7528\u65b9\u4fbf\uff0c\u91cd\u65b0\u547d\u540d\u4e3aEC\u4e86\uff08\u6709\u70b9\u50cf\u6570\u636e\u5e93\u91cc\u9762\u591a\u8868\u67e5\u8be2\u65f6\u5019\u91cd\u547d\u540d\uff09<\/span>
\n \u6253\u5f00\u535a\u5ba2\u9996\u9875\u540e\u5224\u65adtitle,\u8fd4\u56de\u7ed3\u679c\u662fTrue\u6216False<\/span> <\/p>\n# coding:utf-8
<\/span> from selenium import webdriver \n
from selenium.webdriver.support import expected_conditions as EC \n
driver = webdriver.Firefox() \n
driver.get(\"http:\/\/baidu.com\") \n
\n# \u5224\u65adtitle\u5b8c\u5168\u7b49\u4e8e
<\/span> title = EC.title_is(u'\u767e\u5ea6') \n
print title(driver) \n
\n# \u5224\u65adtitle\u5305\u542b
<\/span> title1 = EC.title_contains(u'\u767e\u5ea6') \n
print title1(driver) \n
\n# \u53e6\u5916\u4e00\u79cd\u5199\u6cd5
<\/span> r1 = EC.title_is(u'\u767e\u5ea6')(driver) \n
r2 = EC.title_contains(u'\u767e\u5ea6')(driver) \n
print r1 \n
print r2<\/code><\/pre>\n<\/p><\/div>\n
\nSelenium\u901f\u67e5\u8868<\/h2>\n
Python Webdriver Exception\u901f\u67e5\u8868<\/h3>\n
\n\n
\n \u5f02\u5e38<\/td>\n \u63cf\u8ff0<\/td>\n<\/tr>\n \n WebDriverException<\/td>\n \u6240\u6709webdriver\u5f02\u5e38\u7684\u57fa\u7c7b\uff0c\u5f53\u6709\u5f02\u5e38\u4e14\u4e0d\u5c5e\u4e8e\u4e0b\u5217\u5f02\u5e38\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n InvalidSwitchToTargetException<\/td>\n \u4e0b\u9762\u4e24\u4e2a\u5f02\u5e38\u7684\u7236\u7c7b\uff0c\u5f53\u8981switch\u7684\u76ee\u6807\u4e0d\u5b58\u5728\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n NoSuchFrameException<\/td>\n \u5f53\u4f60\u60f3\u8981\u7528switch_to.frame()\u5207\u5165\u67d0\u4e2a\u4e0d\u5b58\u5728\u7684frame\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n NoSuchWindowException<\/td>\n \u5f53\u4f60\u60f3\u8981\u7528switch_to.window()\u5207\u5165\u67d0\u4e2a\u4e0d\u5b58\u5728\u7684window\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n NoSuchElementException<\/td>\n \u5143\u7d20\u4e0d\u5b58\u5728\uff0c\u4e00\u822c\u7531find_element\u4e0efind_elements\u629b\u51fa<\/td>\n<\/tr>\n \n NoSuchAttributeException<\/td>\n \u4e00\u822c\u4f60\u83b7\u53d6\u4e0d\u5b58\u5728\u7684\u5143\u7d20\u5c5e\u6027\u65f6\u629b\u51fa\uff0c\u8981\u6ce8\u610f\u6709\u4e9b\u5c5e\u6027\u5728\u4e0d\u540c\u6d4f\u89c8\u5668\u91cc\u662f\u6709\u4e0d\u540c\u7684\u5c5e\u6027\u540d\u7684<\/td>\n<\/tr>\n \n StaleElementReferenceException<\/td>\n \u6307\u5b9a\u7684\u5143\u7d20\u8fc7\u65f6\u4e86\uff0c\u4e0d\u5728\u73b0\u5728\u7684DOM\u6811\u91cc\u4e86\uff0c\u53ef\u80fd\u662f\u88ab\u5220\u9664\u4e86\u6216\u8005\u662f\u9875\u9762\u6216iframe\u5237\u65b0\u4e86<\/td>\n<\/tr>\n \n UnexpectedAlertPresentException<\/td>\n \u51fa\u73b0\u4e86\u610f\u6599\u4e4b\u5916\u7684alert\uff0c\u963b\u788d\u4e86\u6307\u4ee4\u7684\u6267\u884c\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n NoAlertPresentException<\/td>\n \u4f60\u60f3\u8981\u83b7\u53d6alert\uff0c\u4f46\u5b9e\u9645\u6ca1\u6709alert\u51fa\u73b0\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n InvalidElementStateException<\/td>\n \u4e0b\u9762\u4e24\u4e2a\u5f02\u5e38\u7684\u7236\u7c7b\uff0c\u5f53\u5143\u7d20\u72b6\u6001\u4e0d\u80fd\u8fdb\u884c\u60f3\u8981\u7684\u64cd\u4f5c\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n ElementNotVisibleException<\/td>\n \u5143\u7d20\u5b58\u5728\uff0c\u4f46\u662f\u4e0d\u53ef\u89c1\uff0c\u4e0d\u53ef\u4ee5\u4e0e\u4e4b\u4ea4\u4e92<\/td>\n<\/tr>\n \n ElementNotSelectableException<\/td>\n \u5f53\u4f60\u60f3\u8981\u9009\u62e9\u4e00\u4e2a\u4e0d\u53ef\u88ab\u9009\u62e9\u7684\u5143\u7d20\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n InvalidSelectorException<\/td>\n \u4e00\u822c\u5f53\u4f60xpath\u8bed\u6cd5\u9519\u8bef\u7684\u65f6\u5019\u629b\u51fa\u8fd9\u4e2a\u9519<\/td>\n<\/tr>\n \n InvalidCookieDomainException<\/td>\n \u5f53\u4f60\u60f3\u8981\u5728\u975e\u5f53\u524durl\u7684\u57df\u91cc\u6dfb\u52a0cookie\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n UnableToSetCookieException<\/td>\n \u5f53driver\u65e0\u6cd5\u6dfb\u52a0\u4e00\u4e2acookie\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n TimeoutException<\/td>\n \u5f53\u4e00\u4e2a\u6307\u4ee4\u5728\u8db3\u591f\u7684\u65f6\u95f4\u5185\u6ca1\u6709\u5b8c\u6210\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n MoveTargetOutOfBoundsException<\/td>\n actions\u7684move\u64cd\u4f5c\u65f6\u629b\u51fa\uff0c\u5c06\u76ee\u6807\u79fb\u52a8\u51fa\u4e86window\u4e4b\u5916<\/td>\n<\/tr>\n \n UnexpectedTagNameException<\/td>\n \u83b7\u53d6\u5230\u7684\u5143\u7d20\u6807\u7b7e\u4e0d\u7b26\u5408\u8981\u6c42\u65f6\u629b\u51fa\uff0c\u6bd4\u5982\u5b9e\u4f8b\u5316Select\uff0c\u4f60\u4f20\u5165\u4e86\u975eselect\u6807\u7b7e\u7684\u5143\u7d20\u65f6<\/td>\n<\/tr>\n \n ImeNotAvailableException<\/td>\n \u8f93\u5165\u6cd5\u4e0d\u652f\u6301\u7684\u65f6\u5019\u629b\u51fa\uff0c\u8fd9\u91cc\u4e24\u4e2a\u5f02\u5e38\u4e0d\u5e38\u89c1\uff0cime\u5f15\u64ce\u636e\u8bf4\u662f\u4ec5\u7528\u4e8elinux\u4e0b\u5bf9\u4e2d\u6587\/\u65e5\u6587\u652f\u6301\u7684\u65f6\u5019<\/td>\n<\/tr>\n \n ImeActivationFailedException<\/td>\n \u6fc0\u6d3b\u8f93\u5165\u6cd5\u5931\u8d25\u65f6\u629b\u51fa<\/td>\n<\/tr>\n \n ErrorInResponseException<\/td>\n \u4e0d\u5e38\u89c1\uff0cserver\u7aef\u51fa\u9519\u65f6\u53ef\u80fd\u4f1a\u629b<\/td>\n<\/tr>\n \n RemoteDriverServerException<\/td>\n \u4e0d\u5e38\u89c1\uff0c\u597d\u50cf\u662f\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u9a71\u52a8\u542f\u52a8\u6d4f\u89c8\u5668\u5931\u8d25\u7684\u65f6\u5019\u4f1a\u62a5\u8fd9\u4e2a\u9519<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n Xpath&Css\u5b9a\u4f4d\u65b9\u6cd5\u901f\u67e5\u8868<\/h3>\n
\n\n
\n \u63cf\u8ff0<\/td>\n Xpath<\/td>\n Css<\/td>\n<\/tr>\n \n \u76f4\u63a5\u5b50\u5143\u7d20<\/td>\n \/\/div\/a<\/td>\n div > a<\/td>\n<\/tr>\n \n \u5b50\u5143\u7d20\u6216\u540e\u4ee3\u5143\u7d20<\/td>\n \/\/div\/\/a<\/td>\n div a<\/td>\n<\/tr>\n \n \u4ee5id\u5b9a\u4f4d<\/td>\n \/\/div[@id='idValue']\/\/a<\/td>\n div#idValue a<\/td>\n<\/tr>\n \n \u4ee5class\u5b9a\u4f4d<\/td>\n \/\/div[@class='classValue']\/\/a<\/td>\n div.classValue a<\/td>\n<\/tr>\n \n \u540c\u7ea7\u5f1f\u5f1f\u5143\u7d20<\/td>\n \/\/ul\/li[@class='first']\/following-<\/td>\n ul>li.first + li<\/td>\n<\/tr>\n \n \u5c5e\u6027<\/td>\n \/\/form\/input[@name='username']<\/td>\n form input[name='username']<\/td>\n<\/tr>\n \n \u591a\u4e2a\u5c5e\u6027<\/td>\n \/\/input[@name='continue' and<\/td>\n input[name='continue'][type='button<\/td>\n<\/tr>\n \n \u7b2c4\u4e2a\u5b50\u5143\u7d20<\/td>\n \/\/ul[@id='list']\/li[4]<\/td>\n ul#list li:nth-child(4)<\/td>\n<\/tr>\n \n \u7b2c1\u4e2a\u5b50\u5143\u7d20<\/td>\n \/\/ul[@id='list']\/li[1]<\/td>\n ul#list li:first-child<\/td>\n<\/tr>\n \n \u6700\u540e1\u4e2a\u5b50\u5143\u7d20<\/td>\n \/\/ul[@id='list']\/li[last()]<\/td>\n ul#list li:last-child<\/td>\n<\/tr>\n \n \u5c5e\u6027\u5305\u542b\u67d0\u5b57\u6bb5<\/td>\n \/\/div[contains(@title,'Title')]<\/td>\n div[title*=\"Title\"]<\/td>\n<\/tr>\n \n \u5c5e\u6027\u4ee5\u67d0\u5b57\u6bb5\u5f00\u5934<\/td>\n \/\/input[starts-with(@name,'user')]<\/td>\n input[name^=\"user\"]<\/td>\n<\/tr>\n \n \u5c5e\u6027\u4ee5\u67d0\u5b57\u6bb5\u7ed3\u5c3e<\/td>\n \/\/input[ends-with(@name,'name')]<\/td>\n input[name$=\"name\"]<\/td>\n<\/tr>\n \n text\u4e2d\u5305\u542b\u67d0\u5b57\u6bb5<\/td>\n \/\/div[contains(text(), 'text')]<\/td>\n \u65e0\u6cd5\u5b9a\u4f4d<\/td>\n<\/tr>\n \n \u5143\u7d20\u6709\u67d0\u5c5e\u6027<\/td>\n \/\/div[@title]<\/td>\n div[title]<\/td>\n<\/tr>\n \n \u7236\u8282\u70b9<\/td>\n \/\/div\/..<\/td>\n \u65e0\u6cd5\u5b9a\u4f4d<\/td>\n<\/tr>\n \n \u540c\u7ea7\u54e5\u54e5\u8282\u70b9<\/td>\n \/\/li\/preceding-sibling::div[1]<\/td>\n \u65e0\u6cd5\u5b9a\u4f4d<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n Tips<\/h3>\n
https:\/\/carbon.now.sh<\/p>\n
\n \u70b9\u51fb\u5b89\u88c5<\/span>
\n \u70b9\u51fb\u91cd\u65b0\u52a0\u8f7d\u5373\u53ef\u5b89\u88c5<\/span>
\n \u6309\u5feb\u6377\u952eALT+CMD+A(win\u7cfb\u7edf\u4e0b\u4f7f\u7528\uff1aALT+WIN+A)\u5373\u53ef<\/span>
\n <\/body>
\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"Python\u722c\u866bSeleniumzh-cn","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[145],"tags":[],"class_list":["post-1559","post","type-post","status-publish","format-standard","hentry","category-pythonpcjc"],"_links":{"self":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/posts\/1559"}],"collection":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/comments?post=1559"}],"version-history":[{"count":0,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/posts\/1559\/revisions"}],"wp:attachment":[{"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/media?parent=1559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/categories?post=1559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bianchenghao6.com\/wp-json\/wp\/v2\/tags?post=1559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}