pycharm
Environment configuration chrome drives.exe
, Version selection to be compared with chrome The browser version is similar to python Catalog script
Next from selenium import webdriver # Create a browser driver = webdriver.Chrome() driver.get("https://www.baidu.com") # according to linktext Method to locate the words in the hyperlink attribute interface " Journalism ", See if you can open the news hyperlink ( Be careful link_text The value is in single quotation marks ) #driver.find_element_by_link_text(' Journalism ').click() # according to partial_linktext Method to locate the fuzzy words in the hyperlink attribute interface " The earth ", See if you want to open the map hyperlink driver.find_element_by_partial_link_text(' The earth ').click() import time # The purpose of deep sleep is to make the program slow and easy to watch , Sometimes it's waiting for the element to render time.sleep(5) # Close the browser #driver.quit()
a. Attribute positioning method
# Find all id=root The elements of driver.find_element_by_xpath('//*[@id="root"]
b. Find all id Value inclusion "con" All elements of
notes :contains() Is a function //*[contains(@id,"con")]
c. Find all that contain id=footerLayer And contain class=relativeFooterLayer All elements of
//*[@id="footerLayer" and @class="relativeFooterLayer" ]
d. Find all that contain id=footerLayer perhaps contain class=relativeFooterLayer All elements of
/*[@id="footerLayer" or @class="relativeFooterLayer" ]
f. lookup class With mod At the beginning div attribute
//div[starts-with(@class,'mod')]
1. Absolute positioning
Find the corresponding elements from the top layer to the bottom layer
shortcoming : Page changes , The absolute address will change , Will be positioned incorrectly
from selenium import webdriver import time # Create a browser driver = webdriver.Chrome() driver.get("https://www.ctrip.com/") # Use xpath Method absolute positioning click Ctrip's strategy . Scenic spot function driver.find_element_by_xpath('/html/body/div/div[@id="leftSideNavLayer"]/div/div/div[@style]/div/div/div/div[6]').click() # The purpose of deep sleep is to make the program slow and easy to watch , Sometimes it's waiting for the element to render sleep(2) # Close the browser driver.quit()
from selenium import webdriver import time # Create a browser driver = webdriver.Chrome() driver.get("https://www.ctrip.com/") # Use xpath Methods fuzzy positioning click Ctrip's strategy . Scenic spot function driver.find_element_by_xpath('//body//div[@id="root"]//div[@class="lsn_first_nav_wrap_LZamG"][5]').click() # The purpose of deep sleep is to make the program slow and easy to watch , Sometimes it's waiting for the element to render sleep(2) # Close the browser driver.quit()
Be careful :
1. Spaces are elements that span one or more levels
2.> Indicates the lower sub label
3. attribute :nth-child(1) , Represents the first of the same attributes
# Express id
Find all id=ie-update The elements of #ie-update
. Express class
Find all class=lsn_first_nav_wrap_LZamG The elements of .lsn_first_nav_wrap_LZamG
In order to locate millet note 11T pro+
The price of
# Indicates positioning class The value is brick-list clearfix Of ul Under the label li label , Across multiple levels class be known as price Of p label , Under the span label ul[class="brick-list clearfix"]>li p.price>span
# This action will automatically open the browser , Baidu website , Input " Are you all right? "," How are you? "," How was your day , Is it substantial ?" One of them , And the loading time will slow down by five seconds , After completing the above results , Will automatically close the page from selenium import webdriver # Create a browser driver = webdriver.Chrome() driver.get("https://www.baidu.com") # according to id Attribute positioning element #driver.find_element_by_id('kw').send_keys(" Are you all right? ") # according to class Attribute positioning element #driver.find_element_by_class_name('s_ipt').send_keys(" How are you? ") # according to name Attribute positioning element driver.find_element_by_name('wd').send_keys(" How was your day , Is it substantial ?") import time # The purpose of deep sleep is to make the program slow and easy to watch , Sometimes it's waiting for the element to render time.sleep(5) # Close the browser driver.quit()
from selenium import webdriver import time # Create a browser , Open Baidu input box driver = webdriver.Chrome() driver.get("https://www.baidu.com/") # Defining variables th For the input box th=driver.find_element_by_id('kw') # Enter text in the input box , Empty , Input again time.sleep(3) th.send_keys(" Endless words .....") time.sleep(1) th.clear() th.send_keys(" Are you all right? ") time.sleep(2) # Close the browser driver.quit()
Baidu automatically uploads pictures to search
from selenium import webdriver import time # Create a browser driver=webdriver.Chrome() # Enter Baidu website in the browser driver.get("https://www.baidu.com/") # Click the upload button driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/span[1]').click() # Click to select file driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[5]/div/div/form/div/div[2]/div[2]/input').send_keys('C:\\Users\\hhh\\Desktop\\ Baidu element .png') time.sleep(6) driver.quit()
stay f12 Next console Enter the following code
# Because the date is different every day of each month , So we introduced document.querySelector() Method # Search for class be known as td In the label of id The value is "June-29-2022" # So if you want to click on another date , Direct change id It's worth it document.querySelector('[class="pi-input J_DepDate has-trans trigger-node-406"]').placeholder="2022-3-15"
stay python perform javaScript Format
driver.execute_script('document.querySelector(\'[class="pi-input J_DepDate has-trans trigger-node-406"]\').placeholder="2022-3-15"')
from selenium import webdriver import time # Create a browser , Open Baidu input box driver = webdriver.Chrome() driver.get("https://www.baidu.com/") # Search the input box for driver.find_element_by_id('kw').send_keys("hello,world") time.sleep(2) # Click on the search driver.find_element_by_id('su').click() # Click on the Baidu Encyclopedia of the text driver.find_element_by_xpath('//div[@class="bk_polysemy_1Ef6j"]//a').click() time.sleep(5) # Get all browser windows windows=driver.window_handles # Select the second new browser window driver.switch_to.window(windows[-1]) # Switch to the first browser window driver.switch_to.window(windows[0])
Why switch ifame
The reason is that a web page is nested in a web page , Don't switch ifame, Cannot locate element
from selenium import webdriver import time # Create a browser , Open the alicloud registration interface driver = webdriver.Chrome() driver.get("https://account.aliyun.com/register/qr_register.htm") # Define a variable frame , The value is the positioning frame Elements frame = driver.find_element_by_id('alibaba-register-box') # Cut to html Next frame page driver.switch_to.frame(frame) # Enter the account number in the account number column of the registration interface driver.find_element_by_xpath('//div[@class=" next-form-item-control"]//input').send_keys("17655870668") # Enter the password in the account column of the registration interface driver.find_element_by_xpath('//div[@class="pwd-wrap"] //input[@type="password"]').send_keys("edwdaf") # Switch to... Again frame Outer layer driver.switch_to.parent_frame() time.sleep(3) driver.quit()
from selenium import webdriver import time # Create a browser driver = webdriver.Chrome() # Open my local pop-up window html file driver.get("E:\\python_pro\\venv\\1.html") # Define a variable for the pop-up alert window alert = driver.switch_to.alert print(alert.text) time.sleep(3) driver.quit()
from selenium import webdriver import time # introduce ActionChains class from selenium.webdriver.common.action_chains import ActionChains # Create a browser driver = webdriver.Chrome() # Open the JD interface driver.get("https://www.jd.com") time.sleep(3) # Define a variable m Used to receive " Website navigation " location m = driver.find_element_by_xpath('//*[@aria-label=" Website navigation "]') # Passing in variables m, And hover the mouse over " Website navigation " ActionChains(driver).move_to_element(m).perform()#perform() Method means execution time.sleep(3) # Define a variable x Used to receive " Jingdong communications " location x = driver.find_element_by_xpath('//a[@role="menuitem" and text()=" Jingdong communications "]') # Passing in variables x, And hover the mouse over " Website navigation " Of " Jingdong communications " Subpage ActionChains(driver).move_to_element(x).click().perform() time.sleep(3) driver.quit()
from selenium import webdriver import time # introduce ActionChains class from selenium.webdriver.common.action_chains import ActionChains # Create a browser driver = webdriver.Chrome() action= ActionChains(driver) # Open the map interface driver.get("https://map.baidu.com/@11590057.96,4489812.75,4z") time.sleep(6) time.sleep(3) # Location map location u=driver.find_element_by_xpath('//*[@type="system"]') # move_to_element(mask) Move to this element ,click_and_hold() Press mouse ,move_by_offset(50,30) Offset drag ,release() Loosen the mouse ,perform() Perform the operation action.move_to_element(u).click_and_hold().move_by_offset(50,30).release().perform() time.sleep(3) driver.quit()
In order to solve the problem that the page pops up the login window for a period of time
from selenium import webdriver import time # introduce ActionChains class from selenium.webdriver.common.action_chains import ActionChains # Create a browser driver = webdriver.Chrome() # Implicitly waiting for page element time (0-15s) driver.implicitly_wait(15) # Open the map interface driver.get("https://map.baidu.com/@11590057.96,4489812.75,4z") # Record the start time start_time = time.perf_counter() # Click the account number to enter driver.find_element_by_xpath('//*[@name="userName"]').send_keys('1321454654') # Click password input driver.find_element_by_xpath('//*[@name="password"]').send_keys('zawwe343234') # Click login driver.find_element_by_xpath('//*[@value=" Sign in "]').click() action= ActionChains(driver) # Location map location u=driver.find_element_by_xpath('//*[@type="system"]') # move_to_element(mask) Move to this element ,click_and_hold() Press mouse ,move_by_offset(50,30) Offset drag ,release() Loosen the mouse ,perform() Perform the operation action.move_to_element(u).click_and_hold().move_by_offset(50,30).release().perform() time.sleep(3) driver.quit()
You can control the waiting time of a single element
from selenium import webdriver import time # The display wait function is introduced import selenium.webdriver.support.expected_conditions as EC from selenium.webdriver.common.by import By # Create a browser driver = webdriver.Chrome() # Open the map interface driver.get("https://map.baidu.com/@11590057.96,4489812.75,4z") # Record the start time #start_time = time.perf_counter() WebDriverWait(driver,5).until(EC.presence_of_element_located(By.CSS_SELECTOR,'//*[@name="userName"]')) # Record the end time #end_time = time.perf_counter() #print(f'{end_time - start_time} s') # Click the account number to enter driver.find_element_by_xpath('//*[@name="userName"]').send_keys('345761231') # Click password input driver.find_element_by_xpath('//*[@type="password" and @name="password"]').send_keys('21323dwe') # time.sleep(3) # driver.quit()
1. Auto fill login csdn
from selenium import webdriver import time # Create a browser driver=webdriver.Chrome() # Browser input csdn website driver.get("https://www.csdn.net/?spm=1000.2115.3001.4476") # Find hyperlink text login / register , And then click driver.find_element_by_link_text(' Sign in / register ').click() # Click login mode - Password to login driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div[1]/div[1]/div[1]/span[4]').click() # Input csdn account number driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div[1]/div/div[2]/div/div[1]/div/input').send_keys(' account number ') # Input csdn password driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div[1]/div/div[2]/div/div[2]/div/input').send_keys(' password ') # Sign in driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[2]/div[1]/div/div[2]/div/div[4]/button').click() time.sleep(10) driver.quit()
from selenium import webdriver import time # introduce ActionChains class from selenium.webdriver.common.action_chains import ActionChains # Create a browser driver = webdriver.Chrome() # Implicitly waiting for page element time (0-15s) driver.implicitly_wait(5) # Open the map interface driver.get("https://map.baidu.com/@11590057.96,4489812.75,4z") # Record the start time #start_time = time.perf_counter() # Click the account number to enter driver.find_element_by_xpath('//*[@name="userName"]').send_keys('423425465') # Click password input driver.find_element_by_xpath('//*[@type="password" and @name="password"]').send_keys('8vsdrw5') # Click login driver.find_element_by_xpath('//*[@value=" Sign in " and @type="submit"]').click() # Record the end time #end_time = time.perf_counter() #print(f'{end_time - start_time} s') action = ActionChains(driver) # Location map location u=driver.find_element_by_xpath('//*[@type="system"]') #move_to_element(mask) Move to this element ,click_and_hold() Press mouse ,move_by_offset(50,30) Offset drag ,release() Loosen the mouse ,perform() Perform the operation action.move_to_element(u).click_and_hold().move_by_offset(50,30).release().perform() # time.sleep(3) # driver.quit()