Skip to content

Commit 790d4f7

Browse files
committed
finish piece info
1 parent 83fe208 commit 790d4f7

File tree

1 file changed

+43
-14
lines changed

1 file changed

+43
-14
lines changed

pieces/SeleniumWebBrowserPiece/piece.py

+43-14
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
from .models import InputModel, OutputModel,CommandInput, CommandOutput
33
from selenium import webdriver
44
from selenium.webdriver.chrome.options import Options
5+
from selenium.webdriver.common.by import By
56
from pathlib import Path
7+
from typing import List
8+
import json
69
class SeleniumWebBrowserPiece(BasePiece):
710

811
def piece_function(self, input_data: InputModel):
@@ -13,23 +16,49 @@ def piece_function(self, input_data: InputModel):
1316
options.add_argument("--no-sandbox")
1417

1518
self.logger.info("Start chrome web driver.")
16-
driver = webdriver.Chrome(options=options)
19+
self.driver = webdriver.Chrome(options=options)
1720

21+
outputs = self.run_commands(commands=input_data.commands)
22+
23+
self.driver.quit()
24+
25+
return OutputModel(
26+
outputs=outputs
27+
)
28+
29+
def run_commands(self, commands: List[CommandInput]) -> List[str]:
1830
results_path = Path(self.results_path)
1931

20-
for cmd in input_data.commands:
32+
outputs: List[str] = []
33+
34+
for idx, cmd in enumerate(commands):
35+
result = ""
36+
37+
self.logger.info(f"commands[{idx}] - {cmd.name}" + (f": {cmd.value}" if cmd.value else ""))
38+
39+
if cmd.name.value == "get":
40+
self.driver.get(cmd.value)
41+
42+
if cmd.name.value == "current_url":
43+
result = self.driver.current_url
44+
2145
if cmd.name.value == "save_screenshot":
2246
cmd.value = str(results_path/cmd.value)
23-
self.display_result = dict(file_type="png",filepath=cmd.value)
24-
25-
if cmd.name.value is None:
26-
getattr(driver, cmd.name)()
27-
else:
28-
getattr(driver, cmd.name)(cmd.value)
29-
30-
driver.quit()
47+
self.driver.save_screenshot(cmd.value)
48+
result = cmd.value
3149

32-
return OutputModel(
33-
outputs=[dict(name="out1", result="res1")]
34-
)
35-
50+
if cmd.name.value == "find_element_css":
51+
result = self.driver.find_element(By.CSS_SELECTOR, cmd.value).text
52+
53+
if cmd.name.value == "find_elements_css":
54+
elements = self.driver.find_elements(By.CSS_SELECTOR, cmd.value)
55+
result = []
56+
for e in elements:
57+
result.append(e.get_attribute('innerHTML'))
58+
59+
if not isinstance(result,str):
60+
result = str(result)
61+
62+
outputs.append(result)
63+
64+
return outputs

0 commit comments

Comments
 (0)