自动化浏览器交互
以编程方式模拟点击、滚动、提交表单以及等待元素加载等用户操作。
自动化浏览器交互 是 CoddyKit 上的免费 Web Scraping & Bots 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Web Scraping & Bots 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Web Scraping & Bots 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Automate Browser Actions
In the previous lesson, we introduced Selenium for handling dynamic web content. Now, let's learn how to make our bots interact with web pages!
We'll simulate real user actions like clicking buttons, typing into forms, and scrolling, making our scrapers much more powerful.
Locate Elements First
Before you can interact with an element (like a button or a text box), you need to find it on the page. Selenium provides several ways to do this.
You'll use methods like find_element(By.ID, "some_id") or find_element(By.CLASS_NAME, "some_class") to pinpoint your target.
By.ID: Unique ID attribute.By.NAME: Name attribute.By.CLASS_NAME: CSS class.By.XPATH: Powerful path expressions.By.CSS_SELECTOR: CSS selector syntax.
Making a Click
The most common interaction is clicking. Whether it's a button, a link, or a checkbox, the .click() method does the job.
After finding an element, just call .click() on it. This simulates a user's mouse click.
Try clicking a fictitious button:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def main():
driver = webdriver.Chrome() # Or Firefox, Edge, etc.
driver.get("https://www.example.com")
try:
# Imagine a button with ID 'myButton'.
# On example.com, we can click the 'More information...' link.
more_info_link = driver.find_element(By.LINK_TEXT, "More information...")
more_info_link.click()
print("Clicked 'More information...' link.")
time.sleep(2) # To see the new page
finally:
driver.quit()
if __name__ == "__main__":
main()Entering Text
To fill out forms or search bars, you use the .send_keys() method. This simulates typing text into an input field.
You can also send special keys like Keys.ENTER, Keys.TAB, etc., from selenium.webdriver.common.keys.
Let's type into a search box:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def main():
driver = webdriver.Chrome()
driver.get("https://www.google.com") # Using google for a search box
try:
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("CoddyKit Selenium")
time.sleep(2) # See the typed text
finally:
driver.quit()
if __name__ == "__main__":
main()Sending Form Data
After filling out a form, you often need to submit it. You can do this in a couple of ways:
- Click the submit button:
submit_button.click() - Call
.submit()on any input element within the form:input_field.submit()
The .submit() method is convenient as it doesn't require finding the specific submit button.
Example of submitting a form (after typing):
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
def main():
driver = webdriver.Chrome()
driver.get("https://www.google.com")
try:
search_box = driver.find_element(By.NAME, "q")
search_box.send_keys("Selenium forms")
search_box.submit() # Submits the form containing this element
time.sleep(3) # Observe search results
finally:
driver.quit()
if __name__ == "__main__":
main()Why We Need to Wait
Web pages often load content dynamically using JavaScript. This means elements might not be immediately available when Selenium tries to find them.
If your script tries to interact with an element that hasn't loaded yet, it will throw an error. This is where "waits" come in!
Waits tell Selenium to pause execution until a certain condition is met or a timeout occurs.
Simple Implicit Waits
An implicit wait tells the WebDriver to poll the DOM (Document Object Model) for a certain amount of time when trying to find an element.
If the element is not immediately available, the driver will wait for the specified duration before throwing a NoSuchElementException.
It's a global setting for the entire driver session:
from selenium import webdriver
import time
def main():
driver = webdriver.Chrome()
# Set implicit wait for 10 seconds
driver.implicitly_wait(10)
try:
driver.get("https://www.example.com")
print("Implicit wait set for 10 seconds.")
# Any subsequent find_element calls will wait up to 10s
# if the element isn't immediately found.
time.sleep(2) # Just to show the wait is active
finally:
driver.quit()
if __name__ == "__main__":
main()Precise Explicit Waits
Explicit waits are more powerful and flexible. They allow you to define a specific condition to wait for, rather than a fixed time.
You use WebDriverWait in combination with expected_conditions (often imported as EC) to specify what you're waiting for. This is best for specific elements and dynamic content.
Here's how to wait for a (fictional) element with ID 'dynamicDiv' to be visible:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
def main():
driver = webdriver.Chrome()
driver.get("https://www.example.com")
try:
print("Waiting for an element to be visible...")
# WebDriverWait waits up to 10 seconds
# for an element with ID 'dynamicDiv' to become visible.
# This element does not exist on example.com, so it will timeout.
# In a real app, replace with a real ID.
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "dynamicDiv"))
)
print(f"Element found: {element.text}")
except Exception as e:
print(f"Element not found or timed out: {e}")
finally:
driver.quit()
if __name__ == "__main__":
main()Scrolling for More Content
Some websites load content as you scroll down (infinite scroll). To access this content, your bot needs to scroll the page.
You can use JavaScript execution to scroll to a specific position or to the bottom of the page.
To scroll to the very bottom:
from selenium import webdriver
import time
def main():
driver = webdriver.Chrome()
driver.get("https://www.wikipedia.org") # A page that can be scrolled
try:
# Scroll down to the bottom of the page
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print("Scrolled to the bottom of the page.")
time.sleep(2) # Observe the scroll
# You can also scroll incrementally:
# driver.execute_script("window.scrollBy(0, 500);")
finally:
driver.quit()
if __name__ == "__main__":
main()Interacting with Select Menus
HTML <select> elements (dropdown menus) require a special approach in Selenium using the Select class.
First, find the <select> element, then create a Select object, and finally use methods like select_by_visible_text(), select_by_value(), or select_by_index().
Example:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time
def main():
driver = webdriver.Chrome()
# For this example, we'll use a test page with a dropdown.
# In a real scenario, you'd navigate to a specific URL.
driver.get("https://www.selenium.dev/selenium/web/formPage.html")
try:
# Find the select element by its ID
select_element = driver.find_element(By.ID, "selectMenu")
select = Select(select_element)
# Select an option by its visible text
select.select_by_visible_text("Example select text")
print("Selected 'Example select text' by visible text.")
time.sleep(2)
# Select an option by its value attribute
select.select_by_value("2")
print("Selected option with value '2'.")
time.sleep(2)
finally:
driver.quit()
if __name__ == "__main__":
main()Test Your Knowledge
You've learned about automating various browser interactions and the crucial role of waits.
Which of the following are valid ways to interact with web elements using Selenium in Python?
Recap: Automating Interactions
Well done! You now know how to make your Selenium bots perform common user actions:
- Finding Elements: Using various
Bystrategies. - Interacting:
.click()for buttons/links,.send_keys()for text input, and.submit()for forms. - Waiting: Essential for dynamic content, using
implicitly_wait()or more preciseWebDriverWaitwithexpected_conditions. - Advanced: Scrolling with JavaScript and handling dropdowns with the
Selectclass.
These skills are fundamental for building robust web automation scripts!
常见问题解答
「自动化浏览器交互」课时是免费的吗?
是的 — 「自动化浏览器交互」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Web Scraping & Bots 课程的其余内容,请升级到 CoddyKit PRO。 Web Scraping & Bots 课程共包含 4 节课。
「自动化浏览器交互」这节课中我会学到什么?
以编程方式模拟点击、滚动、提交表单以及等待元素加载等用户操作。 你通过在浏览器中直接运行的动手代码来练习 Web Scraping & Bots,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Web Scraping & Bots 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Web Scraping & Bots 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「自动化浏览器交互」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Web Scraping & Bots 课中编写并运行代码吗?
能。每节 Web Scraping & Bots 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。